2016-08-10 1120 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我欣賞讚美和參考。 –