【问题标题】:How to use array_intersect inside foreach in PHP, MySQL如何在 PHP、MySQL 的 foreach 中使用 array_intersect
【发布时间】: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>

【问题讨论】:

    标签: php mysql arrays foreach while-loop


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 2016-05-17
      • 2016-05-01
      • 1970-01-01
      相关资源
      最近更新 更多