首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP for 迴圈進階用法大全:從無限迴圈到多重控制

     編輯:PHP 相關知識

for 迴圈語法回顧

for (expr1; expr2; expr3)
    statement
  • expr1:初始化(迴圈開始前執行一次)
  • expr2:條件判斷(每次迭代前評估,為 false 則結束)
  • expr3:迭代運算(每次迭代結束後執行)

三個表達式皆可為空,靈活運用可實現多種進階模式。

1. 無限迴圈

<?php
for (;;) {
    // 持續執行的工作(如守護進程、佇列消費)
    // 配合 break 條件跳出
    if (date('Y') == '2199') {
        break;
    }
}
?>

2. 空表達式應用

初始化邏輯複雜時留空 expr1

<?php
// 複雜初始化放在迴圈外
if (isset($i)) {
    unset($i);
    $i = (int)date('Y') < 2008 ? 0 : 1;
} else {
    $i = 3;
}

for (; $i < 10; $i++) {
    echo $i;
}
?>

迭代邏輯複雜時留空 expr3

<?php
for ($i = 0; $i < 10; ) {
    echo $i;
    // 根據條件決定步進
    $i += ($i % 2 === 0) ? 2 : 1;
}
?>

條件判斷複雜時留空 expr2(等同無限迴圈)

<?php
for ($i = 0; ; $i++) {
    if ($i > 100) break;
    if ($i % 7 === 0) continue;
    echo $i;
}
?>

3. 多重迴圈(多變數控制)

雙變數同步迭代

<?php
for ($i = 0, $j = 10; $i <= 10; $i++, $j--) {
    echo "$i + $j = 10\n";
}
/* 輸出:
0 + 10 = 10
1 + 9 = 10
...
10 + 0 = 10
*/
?>

巢狀迴圈與 break n 跳出多層

<?php
for ($i = 1; $i <= 10; $i++) {
    for ($j = 1; $j <= 10; $j++) {
        $m = $i * $i + $j * $j;
        echo "$m\n";
        if ($m < 90 || $m > 190) {
            break 2; // 跳出兩層迴圈
        }
    }
}
?>

注意:break 後可接數字 n 表示跳出層數,預設為 1。break 可用於 for、foreach、while、do-while、switch。

4. 無迴圈主體的運算技巧

累加與階乘

<?php
// 1+2+3+4+5 = 15
for ($i = 1, $j = 0; $i <= 5; $j += $i++);
echo $j; // 15

// 5! = 120
for ($i = 1, $j = 1; $i <= 5; $j *= $i++);
echo $j; // 120
?>

5. continue 跳過本次迭代

<?php
// 輸出 100 以內不能被 3 或 7 整除的自然數
for ($i = 1; $i <= 100; $i++) {
    if ($i % 3 === 0 || $i % 7 === 0) {
        continue; // 直接進入下一次迭代
    }
    echo "$i\n";
}
?>

注意:continue 僅用於迴圈結構,switch 視為迴圈時可用,但 if 中使用會報錯。同樣支援 continue n 跳過外層迴圈當次迭代。

6. 實戰進階模式

動態步進的斐波那契數列

<?php
for ($a = 0, $b = 1; $a < 1000; [$a, $b] = [$b, $a + $b]) {
    echo "$a ";
}
// 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
?>

多條件提前結束

<?php
$users = [/* 大量資料 */];
for ($i = 0, $count = count($users); $i < $count; $i++) {
    if (processUser($users[$i]) === false) {
        break; // 處理失敗即停止
    }
    if ($i % 100 === 0) {
        gc_collect_cycles(); // 定期釋放記憶體
    }
}
?>

效能與最佳實踐建議

  1. 預計算陣列長度:for ($i=0, $len=count($arr); $i<$len; $i++) 避免每次呼叫 count()。
  2. 優先使用 foreach:遍歷陣列/物件時語意更清晰、效能相近。
  3. 避免在迴圈中做重型操作:資料庫查詢、API 請求應批次處理。
  4. 大量資料考慮 Generator:yield 逐行產生,避免記憶體暴增。
  5. 善用 break/continue:減少不必要的迭代,提升效率。

掌握 for 迴圈的各種變體,能讓你在面對複雜控制流程時遊刃有餘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved