如何在 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存储的多个值以供输出