php - 如何在 PHP、MySQL 中的 foreach 中使用 array_intersect

标签 php mysql arrays foreach while-loop

我正在尝试通过比较从另一个表获得的结果来循环表,但它似乎跳过了空索引值。

我想从结果中得到的是,如果可以在 $b 上找到 $a 的值之一,它应该回显它关联的循环或者更确切地说是该数组的索引。

       <ol>
            <?php
            $questions = db_query("SELECT * FROM tbl_questions");
            while ($quests = $questions->fetch_assoc()) {
                $b[] = $quests['question_id'];
                $comp = db_select("SELECT * FROM tbl_votes WHERE `user_id` = $userids");
                foreach($comp as $compare){
                    $check[] = $compare['question_id'];
                }
                $a = array_intersect($b, $check);
                if($a){
                    echo "<li><a class='qstyle' href='questions/".$quests['question_id'].".php'>".$quests['question_title']."</a></li>";
                }
                elseif($quests['question_live'] == 1){
                        echo "<li><strong><a class='qstyle' href='vote_page.php?var=".$quests['question_id']."'>".$quests['question_title']."</a></strong></li>";
                }
                elseif($quests['question_live'] == 0){
                    echo "<li style='color:#968c8d'>".$quests['question_title']."</li>";
                }                       
            }
            ?>
        </ol>

最佳答案

你的问题数组循环应该在你与你的 $check 相交之前关闭,否则你无法获得全部问题。

此外,您需要更改逻辑以显示差异。根据您的要求,我认为您不应该使用 array_intersect

实际上,如果您在 $b[] = $quests['question_id']; 之后使用 print_r($b);,您将找到您的 $b 不是您所期望的。

试试这个:

<ol>
            <?php
            $questions = db_query("SELECT * FROM tbl_questions");
            while ($quests = $questions->fetch_assoc()) {
                $b[$quests['question_id']] = $quests;
            }
            $comp = db_select("SELECT * FROM tbl_votes WHERE `user_id` = $userids");
            foreach($comp as $compare){
                $check[] = $compare['question_id'];
            }
            foreach($b as $qid=>$quest){
                if(in_array($qid, $check)) echo "<li><a class='qstyle' href='questions/".$qid.".php'>".$quest['question_title']."</a></li>";
                elseif($quest['question_live'] == 1) echo ...;
                elseif($quest['question_live'] == 0) echo ...;
            }
            ?>
        </ol>

关于php - 如何在 PHP、MySQL 中的 foreach 中使用 array_intersect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32847352/

相关文章:

php - 使用 printf 调用图像

PHP - 将数组值存储在变量中

javascript - 如何知道两个数组是否具有相同的值

c - 在C中将一个数组中的项目附加到另一个数组的末尾

php - 有没有办法在不必创建变量的情况下捕获异常?

php - Postgres/PHP - 检索插入行 ID 的标准方法是什么?

php - Laravel 使用函数查询失败

php - sql 查询 & foreach 和 <td>

javascript - php + mysql如何根据表变化轮询数据库

javascript - 比较 Javascript 中的两个数组 - 返回差异