基于查询结果集的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循环迭代的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 如何有条件地跳过for循环迭代

For循环问题中的PHP字符迭代[重复]

python跳过for循环

如何跳过for-in循环的迭代(Swift 3)

如何有条件地跳过python中for循环中的迭代步骤数?

Python:如果条件为真,则跳过 For 循环中的迭代