2009-02-26 74 views
94

我有一個循環,正在我的PHP代碼中進行一些錯誤檢查。最初它看起來像這樣...你能退出PHP中的循環嗎?

foreach($results as $result) { 
    if (!$condition) { 
     $halt = true; 
     ErrorHandler::addErrorToStack('Unexpected result.'); 
    } 

    doSomething(); 
} 

if (!$halt) { 
    // do what I want cos I know there was no error 
} 

這工作都很好,但它仍然循環,儘管一個錯誤後它不需要。有沒有辦法擺脫循環?

回答

158

您正在尋找break聲明。

$arr = array('one', 'two', 'three', 'four', 'stop', 'five'); 
while (list(, $val) = each($arr)) { 
    if ($val == 'stop') { 
     break; /* You could also write 'break 1;' here. */ 
    } 
    echo "$val<br />\n"; 
} 
+12

@Gabriel,它回答了問題,代碼示例就是這樣一個示例。您也可以抱怨非描述性的「$ arr」數組名稱。 – paxdiablo 2009-02-26 02:51:22

+5

@Gabriel:我在PHP手冊中直接引用了代碼,它準確地顯示了break語句的用法。 – TheTXI 2009-02-26 02:52:29

+0

@Pax,對我來說這是主觀的,每次我舉一個例子,我試圖把一個真實世界的代碼。 – 2009-02-26 02:53:46

4

使用break

+0

Atleast另一個人的代碼有一些例子,如果它不使用foreach:P – 2013-04-03 09:22:15

127

如其他帖子所述,您可以使用break關鍵字。有一點是暗示的,但沒有解釋的是,關鍵字可以通過一個數值來告訴PHP有多少層次可以打破。例如,如果你有三個foreach循環相互嵌套試圖找到一條信息,你可以做'break 3'以擺脫所有三個嵌套循環。這將適用於'for','foreach','while','do-while'或'switch'結構。

$person = "Rasmus Lerdorf"; 
$found = false; 

foreach($organization as $oKey=>$department) 
{ 
    foreach($department as $dKey=>$group) 
    { 
     foreach($group as $gKey=>$employee) 
     { 
     if ($employee['fullname'] == $person) 
     { 
      $found = true; 
      break 3; 
     } 
     } // group 
    } // department 
} // organization 
38

break;離開你的循環。

continue;跳過該循環其餘部分的任何代碼,並繼續下一個循環,只要條件仍然爲真。

1
$arr = array('one', 'two', 'three', 'four', 'stop', 'five'); 
foreach ($arr as $val) { 
    if ($val == 'stop') { 
     break; /* You could also write 'break 1;' here. */ 
    } 
    echo "$val<br />\n"; 
} 
-1

我試過使用CSS的解決方案,但無法爲我工作。

替換href="#"href="javascript:void(0);"已經在這種情況下工作,模式不會跳轉到頂部並停留在事件元素位置。

1

所有這些都是很好的答案,但我想建議一個我覺得是更好的代碼標準。您可以選擇在循環條件中使用標誌,指示是否繼續循環並避免一起使用break

$arr = array('one', 'two', 'three', 'four', 'stop', 'five'); 
$length = count($arr); 
$found = false; 
for ($i = 0; $i < $length && !$found; $i++) { 
    $val = $arr[$i]; 
    if ($val == 'stop') { 
     $found = true; // this will cause the code to 
         // stop looping the next time 
         // the condition is checked 
    } 
    echo "$val<br />\n"; 
} 

我認爲這是更好的代碼的做法,因爲它不依賴於break使用範圍。相反,您可以定義一個變量來指示是否打破特定的循環。當你有很多循環可能或不可能嵌套或順序時,這很有用。