PHP基于查询结果集跳过循环迭代

时间:2016-08-10 17:30:20

标签: php mysql for-loop continue

让我们说例如我有一个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...

正如您将会欣赏硬编码这些值非常耗时且效率不高。如果有人能提供帮助,我们将不胜感激。

3 个答案:

答案 0 :(得分:3)

如果您的查询结果作为数组返回,则可以使用 if(in_array($i, $results))根据结果检查$ i

答案 1 :(得分:3)

如果您可以自动收集当前正在编码的值,则可以使用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:我更喜欢&#34; Dont Panic&#34;回答,它没有使用太多的循环。 (in_array将循环遍历数组以查找您的值)。见他的回答:https://stackoverflow.com/a/38880057/3799829

答案 2 :(得分:2)

在获取查询结果时,将值添加到数组中。例如,我在这里使用了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