在處理多維陣列或巢狀迴圈時,常需根據條件同時跳出多層迴圈。PHP 的 break 支援選擇性參數指定跳出層級,本文透過實例詳細說明 break 2 的運作機制與應用場景。
兩個陣列巢狀迴圈,當內層符合條件時,需完全結束雙層迴圈:
$arr1 = ['a1', 'a2', 'a3', 'a4'];
$arr2 = ['b1', 'b2', 'b3', 'b4'];
foreach ($arr1 as $a1) {
foreach ($arr2 as $k => $a2) {
if ($k === 2) { // 當索引為 2 時
// 需要同時跳出兩層 foreach
}
echo "{$a1} === {$a2}<br>";
}
}
foreach ($arr1 as $a1) {
foreach ($arr2 as $k => $a2) {
if ($k === 2) {
break 2; // 關鍵:跳出 2 層迴圈
}
echo "{$a1} === {$a2}<br>";
}
}
a1 === b1 a1 === b2 // 當 k=2 時觸發 break 2,直接結束所有迴圈 // a1 === b3 不會輸出 // a2, a3, a4 的迴圈也不會執行
| 語法 | 效果 | 適用對象 |
|---|---|---|
break / break 1 | 跳出當前迴圈/ switch | 單層迴圈、switch 結構 |
break 2 | 跳出外層 + 當前共 2 層 | 雙層巢狀迴圈 |
break N | 跳出 N 層巢狀結構 | 多層巢狀(N 為正整數) |
foreach ($arr1 as $a1) {
foreach ($arr2 as $k => $a2) {
if ($k === 2) {
continue 2; // 跳過外層本次迭代,直接進入 $arr1 下一個元素
}
echo "{$a1} === {$a2}<br>";
}
}
| 關鍵字 | 行為 | 輸出結果 |
|---|---|---|
break 2 | 完全結束雙層迴圈 | 僅輸出 a1-b1, a1-b2 |
continue 2 | 跳到外層下一輪 | 輸出 a1-b1, a1-b2, a2-b1, a2-b2, a3-b1... |
Java/Perl 支援標籤跳轉:
outer: for (int i=0; i<10; i++) {
for (int j=0; j<10; j++) {
if (condition) break outer; // 指定標籤跳出
}
}
PHP 僅支援數字層級,無標籤機制,設計巢狀結構時需注意層數計算。
break 2; // 跳出雙層 foreachreturn$shouldBreak = true 配合外層判斷function findMatch(array $arr1, array $arr2): ?array {
foreach ($arr1 as $a1) {
foreach ($arr2 as $k => $a2) {
if ($k === 2) {
return ['a1' => $a1, 'a2' => $a2]; // 直接返回,隱含跳出所有層級
}
}
}
return null;
}
函式 return 能更優雅地處理多層跳出,同時提升程式碼可讀性與可測試性。
善用 break N 與函式封裝,能靈活控制複雜巢狀迴圈的流程,寫出更精準的演算法邏輯。