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

Posted

技术标签:

【中文标题】如何在 PHP、MySQL 的 foreach 中使用 array_intersect【英文标题】:How to use array_intersect inside foreach in PHP, MySQL 【发布时间】:2015-12-27 03:11:43 【问题描述】:

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

我想从结果中得到的是,如果可以在 $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>

【问题讨论】:

【参考方案1】:

在与 $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、MySQL 的 foreach 中使用 array_intersect的主要内容,如果未能解决你的问题,请参考以下文章

如何对多个 mysql foreach 数组进行排序并需要它们在 php 中保持一致?

使用 PHP foreach 循环的 javascript 中的 MySQL 数据(Google Maps API)

PHP Mysql PDO查询来自foreach存储的多个值以供输出

使用 PHP 数组输出 MySQL 查询 - foreach 循环错误“非法偏移”和“无效参数”

使用foreach数组使用php将多行插入mysql

php与mysql表中如何求递归求和汇总?