基于查询结果集的PHP跳过for循环迭代
Posted
技术标签:
【中文标题】基于查询结果集的PHP跳过for循环迭代【英文标题】:PHP skip for loop Iteration based on a query result set 【发布时间】:2016-08-10 17:30:19 【问题描述】:比如说,我有一个 mysql 查询的结果集,它产生了以下值:3、5、10、11 等等......
我想在 php 中迭代一个 for 循环,但排除在我的 MySQL 查询结果中等于任何数字的任何迭代。
目前我有:
for($i = 1; $i <= $num_rows; $i++)
if($i == 3 or $i == 5)
continue;
//Rest of loop...
您都会喜欢硬编码这些值非常耗时且效率不高。如果有人可以提供帮助,将不胜感激。
【问题讨论】:
您是否已经在尝试执行此操作时获取了查询的所有结果? 是的,此时我已经获取了结果。我曾考虑将它们放入一个数组中,但我不确定如何将其集成到循环中。 【参考方案1】:如果您可以自动收集当前正在硬编码的值,您可以使用in_array($search, $array[, $strict])
像这样:
$bypass = array(3, 5);
for($i = 1; $i <= $num_rows; $i++)
if( in_array($i, $bypass) )
continue;
// rest of the loop
PS:我更喜欢“不要恐慌”的答案,它不使用太多循环。 (in_array 将遍历数组以找到您的值)。看他的回答:https://***.com/a/38880057/3799829
【讨论】:
这正是我所需要的。谢谢。【参考方案2】:如果您的查询结果以数组形式返回,您可以使用
if(in_array($i, $results))
根据结果检查 $i
【讨论】:
【参考方案3】:在获取查询结果时将值添加到数组中。例如,我在这里使用了 PDO,但您应该能够使其适应您正在使用的任何数据库扩展:
while ($row = $stmt->fetchObject())
$exclude[$row->value] = true;
// whatever else you're doing with the query results
如果您将值用作要跳过的内容数组中的键,则在 for
循环中检查它们应该比使用 in_array
更有效。
for($i = 1; $i <= $num_rows; $i++)
if (isset($exclude[$i])) continue;
// rest of loop
【讨论】:
最好的答案在这里,没有无用的循环 @Bob0t 感谢您的称赞和参考。以上是关于基于查询结果集的PHP跳过for循环迭代的主要内容,如果未能解决你的问题,请参考以下文章