【PHP】解析 break 和 continue 對迴圈的控制

【PHP】解析 break 和 continue 對迴圈的控制

本篇重點

  • 認識 breakcontinue 可用在哪些地方
  • 說明 breakcontinue 的基本語法
  • 介紹 break n;continue n; 在巢狀迴圈中的應用
  • 終止或跳過的層數不能超過實際的巢狀層數,否則會有錯誤訊息
  • switch 裡控制外層迴圈

可用在哪些地方?

  • foreach 迴圈
  • for 迴圈
  • while 迴圈
  • do...while 迴圈

這些結構都可以透過 break 來跳出整個迴圈,或是透過 continue 來略過本次執行,直接進入下一輪

基本語法

break

立即結束目前的迴圈,從迴圈區塊外繼續執行

php
1
2
3
4
5
6
7
8
for ($i = 0; $i < 5; $i++) {
// 當 $i 為 3 時跳出迴圈
if ($i == 3) {
break;
}
echo $i . "\n";
}
echo "迴圈結束";
result
1
2
3
4
0
1
2
迴圈結束

continue

跳過目前迴圈的後續內容,直接進入下一輪

php
1
2
3
4
5
6
7
8
for ($i = 0; $i < 5; $i++) {
// 當 $i 為 3 時略過輸出
if ($i == 3) {
continue;
}
echo $i . "\n";
}
echo "迴圈結束";
result
1
2
3
4
5
0
1
2
4
迴圈結束

在巢狀迴圈中使用 break n;continue n;

多層迴圈(巢狀結構)中可以在 breakcontinue 後加上數字,控制要跳出或跳過幾層迴圈

break n;

多層迴圈(巢狀結構)中,在 break 後加上數字,立即結束 n 層的迴圈,從迴圈區塊外繼續執行

php
1
2
3
4
5
6
7
8
9
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
echo "i = $i, j = $j\n";
if ($j == 1) {
break 2; // 跳出 $j 和 $i 這兩層迴圈
}
}
}
echo "迴圈結束";
result
1
2
3
i = 0, j = 0
i = 0, j = 1
迴圈結束

continue n;

多層迴圈(巢狀結構)中,在 continue 後加上數字,跳過 n 層迴圈的後續內容,直接進入下一輪

php
1
2
3
4
5
6
7
8
9
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
echo "i = $i, j = $j\n";
if ($j == 1) {
continue 2; // 跳過目前 $i 的迴圈,直接到 $i++
}
}
}
echo "迴圈結束";
result
1
2
3
4
5
6
7
i = 0, j = 0
i = 0, j = 1
i = 1, j = 0
i = 1, j = 1
i = 2, j = 0
i = 2, j = 1
迴圈結束

switch 裡控制外層迴圈

switch 通常搭配 break 使用來結束 case 區塊(不能使用 continue)。但如果 switch 是寫在迴圈(如 foreachfor)裡,有時會希望在 switch 中直接跳出外層的迴圈,這時可以使用 break 2continue 2

switch 基本用法

正確範例

php
1
2
3
4
5
6
7
8
9
10
$switch = 'A';
switch ($switch) {
case 'A':
echo "處理 $switch\n";
break;
default:
echo "處理 $switch\n";
break;
}
echo "switch 結束\n";
result
1
2
處理 A
switch 結束

錯誤範例

php
1
2
3
4
5
$x = 1;
switch ($x) {
case 1:
continue;
}
result
1
PHP Warning:  "continue" targeting switch is equivalent to "break"

控制外層迴圈

break 2

php
1
2
3
4
5
6
7
8
9
10
$list = ['A', 'break', 'B'];
foreach ($list as $item) {
switch ($item) {
case 'break':
break 2;
default:
echo "處理 $item\n";
}
}
echo "break 2";
result
1
2
處理 A
break 2

continue 2

php
1
2
3
4
5
6
7
8
9
10
$list = ['A', 'continue', 'B'];
foreach ($list as $item) {
switch ($item) {
case 'continue':
continue 2;
default:
echo "處理 $item\n";
}
}
echo "continue 2";
result
1
2
3
處理 A
處理 B
continue 2

注意事項

  • break n;continue n; 中的 n 不能超過實際的巢狀層數,否則會產生錯誤:

    error
    1
    Fatal error: Cannot break/continue N levels
  • breakcontinue 僅適用於「可中斷」的控制結構,因此不能用在 if 等條件式中

結論

  • continue;continue 1; 一樣,僅跳過當前迴圈的剩餘程式碼,進入下一次迴圈。
  • continue n; 跳過 n 層迴圈,直接讓更外層迴圈的當前次數終止並開始下一次迴圈。
  • 避免濫用 continue n;,特別是在多層迴圈,程式的可讀性會降低。

延伸閱讀

作者

健忘工程師

發表於

2025-06-10

更新於

2025-06-10

許可協議


你可能也想看

【PHP】4種判斷變數或陣列是否存在的方法
【PHP】解析邏輯運算子 and、or、&&、|| 之間的差異
【PHP】陣列合併應用:array + array、array_merge()、array_replace()

評論

複製完成