2016-08-10 318 views
0

可以说例如我有一个结果集从一个MySQL查询产生的值:3,5,10,11等等......PHP跳过循环基于查询结果集的迭代

I想要在PHP中循环遍历一个for循环,但排除任何可能与我的MySQL查询结果中的任何数字相等的迭代。

目前的情况是我目前有:

for($i = 1; $i <= $num_rows; $i++) 
{ 
if($i == 3 or $i == 5) 
{ 
    continue; 
} 
//Rest of loop... 

大家都会明白硬编码这些值是非常耗时且效率不高。如果任何人可以帮助它将不胜感激。

+0

您是否已经在您尝试执行此操作的位置提取了查询的所有结果? –

+0

是的,我已经在这一点上取得了结果。我已经打算把它们放入一个数组中,但我不知道如何将它集成到循环中。 – Floyd

回答

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:我更喜欢更在“不要恐慌”的答案,不使用过多的循环。 (in_array将遍历数组以查找您的值)。看到他的回答:https://stackoverflow.com/a/38880057/3799829

+1

这涵盖了我所需要的。谢谢。 – Floyd

3

如果查询结果作为数组返回,您可以使用 if(in_array($i, $results))做$我的支票对结果

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 
+1

最好的答案在这里,没有无用的循环 – Bobot

+1

@ Bob0t我欣赏赞美和参考。 –