PHP `for` 迴圈標準語法 `for (init; condition; increment)` 涵蓋大多數場景,但理解其三大變體寫法能解決特殊控制流需求:如外部初始化、迴圈內複雜增量邏輯、無限迴圈配合 `break`。本文詳細解析三種變體語法、執行流程與實戰應用場景。
// 標準寫法
for ($i = 1; $i <= 5; $i++) {
echo "第 $i 次迭代\n";
}
$i = 1; // 外部初始化
for (; $i <= 5; $i++) { // 第一個分號**不可省略**
echo "第 $i 次迭代\n";
}
$currentPage = max(1, (int)($_GET['page'] ?? 1));
$totalPages = 100;
// 計算顯示頁碼範圍
$startPage = max(1, $currentPage - 2);
$endPage = min($totalPages, $currentPage + 2);
// 使用外部初始化
for ($page = $startPage; $page <= $endPage; $page++) {
echo "$page ";
}
$i = 1;
for (; $i <= 5; ) { // 第三部分留空,**分號不可省略**
echo "第 $i 次迭代\n";
// 複雜增量邏輯
if ($i === 3) {
$i += 2; // 跳過第 4 次
} else {
$i++;
}
}
// 輸出:1, 2, 3, 5, 6(注意:條件 $i<=5 導致 6 不會執行,實際輸出 1,2,3,5)
$items = ['a', 'b', 'skip', 'c', 'd', 'skip', 'e'];
$count = count($items);
for ($i = 0; $i < $count; ) {
if ($items[$i] === 'skip') {
$i++; // 只增加索引,不處理業務邏輯
continue;
}
processItem($items[$i]);
$i++; // 正常增量
}
function processItem($item) {
echo "處理: $item\n";
}
$i = 1;
for (;;) { // 兩個分號**不可省略**,構成無限迴圈
if ($i > 5) {
break; // 必須有明確跳出條件,否則死迴圈
}
echo "第 $i 次迭代\n";
$i++;
}
$handle = fopen('large_log.txt', 'r');
if ($handle) {
for (;;) {
$line = fgets($handle);
if ($line === false) { // EOF 或錯誤
break;
}
// 處理每一行
if (strpos($line, 'ERROR') !== false) {
error_log($line);
}
}
fclose($handle);
}
| 變體 | 語法特徵 | 必要分號數 | 典型用途 |
|---|---|---|---|
| 外部初始化 | `for (; cond; incr)` | 1 個(第一個) | 計數器預計算、外部變數 |
| 內部增量 | `for (; cond; )` | 2 個(第一、二個) | 動態步長、條件跳過 |
| 全空(無限迴圈) | `for (;;)` | 2 個(第一、二個) | 未知迭代次數、輪詢、流讀取 |
文章結語提到:「窮則變,變則通,通則達,看來在程式裡也有這樣的哲學!」確實,掌握語法變體不是為了炫技,而是在標準工具無法優雅解決問題時,擁有更多選擇權。如同工匠熟知各種鋸子的特殊用法,程式設計師應熟練掌握控制流工具的完整光譜,在恰當時機選擇最貼切的表達方式。
PHP `for` 迴圈三大變體:
三者核心共同點:**分號不可省略**,維持 `for` 結構完整性。實務中 95% 場景標準寫法足矣,變體是解決剩餘 5% 棘手問題的利器。靈活運用,寫出更優雅、更可控的迴圈邏輯!