我正在尝试通过比较从另一个表获得的结果来循环表,但它似乎跳过了空索引值。
我想从结果中得到的是,如果可以在 $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/