2011-09-28 62 views
1

當我執行此代碼:問題決裂,而使用它打破嵌套循環在PHP

$result = mysql_query("SELECT * FROM example_table"); 

$i = 0; 
while ($row = mysql_fetch_array($result)) 
{ 
    for ($j = 0; $j < $c; $j++) 
    { 
     if ($db_array[$j]['ID'] == $row['id']) 
     { 
      $del_counter = 0; 
      break 2; 
     } 
     else 
     $del_counter = 1; 
    } 

    if ($del_counter == 1) 
    { 
    $del_array[$i] = $row['id']; 
    $i++; 
    } 

} 

這不破二級循環。相反,$ del_array存儲所有的行標識符。我需要比較db_array [] [id]和數組「row」(從數據庫中提取)。並且需要檢查從數據庫中刪除了哪些db_array元素。所以,我所做的是我試圖將已刪除項目的ID存儲在數組中。但休息不起作用。我錯過了什麼嗎?

感謝您的期待。

BG

+0

嘗試在嵌套for之前定義$ del_counter = 0。 –

+1

我不想聽起來粗魯,但「break 2」會按照公佈的方式工作,所以我會認爲你的代碼中存在邏輯缺陷。使用分步調試器來查看你的代碼在做什麼。 – hakre

+0

你能重新說明一下嗎?如果一行被刪除,您希望如何檢索它? – mowwwalker

回答

2

根據PHP手冊:

1) break ends execution of the current for, foreach, while, do-while or switch structure 
2) break accepts an optional numeric argument which tells it 
how many (the above mentioned) nested enclosing structures are to be broken out of 

你休息是2級,因此break 2;應該按預期方式工作,所以這個問題是其他地方。 break 2是否執行?

無論如何,我會推薦一個更強大的解決方案,例如,

$ok = True; 
while (($row = mysql_fetch_array($result)) && $ok) { 
     ... 
     if (...) $ok = False; // anywhere deep 
     ... 
     if ($ok) {...} 
} 
+0

休息結束時,foreach,while,do-while或switch結構的當前執行,所以休息2將按預期工作 – matino

+0

@matino:你是對的,我編輯了我的答案。 – Jiri

+0

謝謝Jiri和matino。然而,第一次爲我工作。在那一刻我無法弄清楚這是我身邊的邏輯錯誤。 – BasicGem