PHP 中常見的循環結構包括 for、while、do...while 以及 foreach。在這些循環中,若要提前結束或跳過某次迭代,主要有以下幾種方式:continue、break、exit、goto(已棄用)以及 return。本文將逐一解析它們的行為差異,並附上實際程式碼範例。
<?php
$i = 1;
while (true) {
if ($i == 2) { // 跳過 2
$i++;
continue;
} else if ($i == 5) { // 遇到 5 直接跳出循環
break;
} else {
echo $i . '<br>';
}
$i++;
}
exit; // 結束整個腳本執行
echo '這裡不輸出';
?>
輸出結果:
1
3
4
continue 僅用於循環結構中,作用是放棄本次循環剩餘代碼,直接進入下一次迭代。若在非循環結構(如 if、switch)中使用會報錯。
<?php
for ($i = 1; $i <= 100; $i++) {
if ($i % 3 == 0 || $i % 7 == 0) {
continue; // 能被 3 或 7 整除則跳過輸出
} else {
echo $i . '<br/>';
}
}
?>
此程式會輸出 100 以內既不能被 3 整除也不能被 7 整除的自然數。
break 可用於各類循環及 switch 語句,用於跳出當前語法結構,繼續執行後續代碼。可接受一個可選參數 n,表示跳出的循環層數(預設為 1)。
for ($i = 1; $i <= 10; $i++) {
for ($j = 1; $j <= 10; $j++) {
$m = $i * $i + $j * $j;
echo $m . '<br/>';
if ($m < 90 || $m > 190) {
break 2; // 直接跳出兩層循環
}
}
}
若移除參數 2,僅會跳出內層循環,外層循環繼續執行,結果將截然不同。
goto 實際上是一個運算符,可將執行流程跳轉到指定標籤位置。雖可借此跳出循環,但會嚴重降低程式碼可讀性,PHP 5.3 及以上版本已停止支援,應盡量避免使用。
for ($i = 1000; $i >= 1; $i--) {
if (sqrt($i) <= 29) {
goto a; // 跳出循環
}
echo $i;
}
a:
echo " this is the end";
exit 用於結束整個程式執行,可用在任何位置,本身無「跳出循環」的語義。可帶一個參數:字串會直接輸出,整數(0-254)作為退出狀態碼。
<?php
for ($i = 1000; $i >= 1; $i--) {
if (sqrt($i) >= 29) {
echo $i . '<br/>';
} else {
exit; // 直接結束腳本,後續 HTML 也不會輸出
}
}
echo "本行將不會被輸出";
?>
return 用於結束函數、include/require 引入的檔案,或主程式。在函數中會返回值給調用者;在主程式中相當於結束腳本執行。
<?php
for ($i = 1000; $i >= 1; $i--) {
if (sqrt($i) >= 29) {
echo $i . '<br/>';
} else {
return; // 效果同 exit,主程式直接停止
}
}
echo "本行將不會被輸出";
?>
當循環條件不再滿足時,循環自然結束,這是最基本、最推薦的方式。
理解這些語句的差異,能幫助你更精確地控制 PHP 程式流程。