在 PHP 開發中,循環結構是控制程式流程、重複執行任務的核心工具。PHP 提供了四種主要的循環語句:while、do-while、for 和 foreach,各有其適用場景與優勢。本文將系統梳理這四種循環的語法、運作機制、最佳實踐與常見陷阱,助你靈活駕馭迴邏輯。
while 是 PHP 中最簡單的循環結構,適合「先判斷條件,再決定是否執行」的場景。其核心特點是:若初始條件不成立,循環體一次也不會執行。
<?php
// 大括號寫法
while (expr) {
statement;
}
// 替代語法(常用於模板輸出)
while (expr):
statement;
endwhile;
?>
運作邏輯:每次迴圈開始前評估 expr,為 TRUE 則執行 statement,直到 expr 為 FALSE 才結束。
<?php
$i = 1;
while ($i <= 10) {
echo $i . ' ';
$i++;
}
// 輸出:1 2 3 4 5 6 7 8 9 10
?>
do-while 與 while 邏輯相似,但條件判斷後置,確保循環體無條件執行至少一次,適用於「先執行再檢查」的業務場景(如選單驅動程式、輸入驗證)。
<?php
do {
statement;
} while (expr);
<?php
$i = 1;
do {
echo $i . ' ';
$i++;
} while ($i <= 10);
?>
for 循環將初始化、條件判斷、迭代更新三大要素集中在一行,結構緊湊,適合已知迴圈次數或需要精確控制計數器的場景。
<?php
for (expr1; expr2; expr3) {
statement;
}
三表達式解析:
expr1:循環開始前無條件執行一次(通常初始化計數器)expr2:每次循環前評估,TRUE 繼續,FALSE 終止expr3:每次循環結束後執行(通常更新計數器)<?php
for ($i = 1; $i <= 10; $i++) {
echo $i . ' ';
}
// 輸出:1 2 3 4 5 6 7 8 9 10
?>
三個表達式皆可留空,配合 break 實現靈活控制:
<?php
// 無限循環 + 內部條件跳出
for ($i = 1; ; $i++) {
if ($i > 10) break;
echo $i . ' ';
}
?>
foreach 專為陣列/物件遍歷設計,語法簡潔、效能優異,是處理集合資料的最佳選擇(詳細用法見「PHP foreach 遍歷陣列用法介紹」一文)。
<?php
$colors = ['white' => '白色', 'black' => '黑色', 'red' => '紅色'];
// 僅取值
foreach ($colors as $value) {
echo $value . '<br>';
}
// 同時取鍵與值
foreach ($colors as $key => $value) {
echo "$key => $value<br>";
}
?>
| 循環類型 | 適用場景 | 效能特點 |
|---|---|---|
| while | 條件複雜、次數未知、資料庫讀取迴圈 | 基礎效能 |
| do-while | 至少需執行一次的邏輯(選單、重試機制) | 同 while |
| for | 已知次數、需精確控制索引、多重計數器 | 略優於 while(語法優化) |
| foreach | 陣列/物件遍歷、關聯式陣列處理 | 最優(內部優化) |
FALSE,必要時加入計數器或 break 保護。foreach 中若需修改原陣列值,必須使用引用 &$value,且循環結束後建議 unset($value) 解除引用,防止後續誤用。foreach 不僅可讀性高,執行效率也優於手動索引的 for 迴圈。array_map、array_filter)替代。掌握這四種循環的特性與適用邊界,能讓你編寫出更清晰、高效、健壯的 PHP 程式碼。實務開發中,根據資料結構與業務邏輯選擇最合適的循環結構,是寫出優雅代碼的關鍵一步。