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

PHP 迴圈語句筆記:foreach、while/list/each、for、do-while 完整對比與最佳實踐

     編輯:PHP 綜合知識

foreach:陣列遍歷首選

<?php
$price = ['apple' => 10, 'orange' => 20, 'banana' => 30];

foreach ($price as $key => $value) {
    echo "$key => $value<br>";
}
// 輸出:
// apple => 10
// orange => 20
// banana => 30
?>
  • 支援鍵值同時取得。
  • PHP 7+ 內部陣列指標不受影響 (不再依賴 `each()`)。
  • 可用 `&$value` 直接修改原陣列值。

while + list() + each():舊式遍歷 (PHP 7.2 棄用, 8.0 移除)

<?php
$fruit = ['apple' => 10, 'orange' => 20, 'banana' => 30];

while (list($key, $value) = each($fruit)) {
    echo "$key => $value<br>";
}
// 注意:each() 會移動內部指標,二次遍歷需 reset($fruit)
?>
⚠️ **已棄用/移除**。現代代碼**禁止使用**,改用 `foreach`。

經典迴圈家族

迴圈語法適用場景控制流關鍵字
whilewhile (expr) { ... }條件未知次數、先判斷後執行break, continue
do-whiledo { ... } while (expr);至少執行一次、後判斷break, continue
forfor (init; cond; inc) { ... }已知次數、計數器控制break, continue
foreachforeach ($arr as $k=>$v) { ... }陣列/可迭代物件遍歷break, continue

實用範例集

1. while 產生表格 (交替列色)

<?php
echo '<table border="1" width="800" align="center">';
echo '<caption><h1>while 產生表格</h1></caption>';
$i = 0;
while ($i < 1000) {
    if ($i % 10 == 0) {
        $bg = ($i % 20 == 0) ? '#ffffff' : '#cccccc';
        echo "<tr onmouseover=\"this.style.background='#ffffcc'\" onmouseout=\"this.style.background='$bg'\" bgcolor=\"$bg\">";
    }
    echo "<td>$i</td>";
    $i++;
    if ($i % 10 == 0) echo "</tr>";
}
echo "</table>";
?>

2. do-while 至少一次

<?php
$i = 0;
do {
    echo "$i : do-while 執行<br>";
    $i++;
} while ($i < 10);

3. for 九九乘法表

<?php
for ($i = 1; $i <= 9; $i++) {
    for ($j = 1; $j <= $i; $j++) {
        echo "$j × $i = " . ($j * $i) . "  ";
    }
    echo "<br>";
}
?>

4. break/continue 差異

<?php
for ($i = 1; $i <= 10; $i++) {
    if ($i === 5) continue; // 跳過 5,繼續 6
    if ($i === 8) break;    // 終止迴圈,不執行 8,9,10
    echo $i . "<br>";
}
// 輸出: 1,2,3,4,6,7
?>

最佳實踐建議

  1. 遍歷陣列首選 `foreach`:語意清晰、效能最佳、不受內部指標影響。
  2. 已知次數用 `for`:計數器語意明確。
  3. 未知次數、先檢查條件用 `while`。
  4. 至少一次用 `do-while`**:較少見,但語意精確。
  5. 巢狀迴圈 ≤ 3 層:超過請抽離函數或重構演算法。
  6. 流程控制 ≤ 5 層:過深請提前 `return`/`continue`/`break` 或衛語句。
  7. 避免在迴圈中執行重複計算/查詢**:移至迴圈外、快取結果。

現代 PHP 進階:生成器、迭代器、陣列函數

  • `yield` 生成器:大量資料流式處理,記憶體常數級。
  • `ArrayIterator`、`IteratorAggregate`:物件化陣列操作。
  • `array_map`/`array_filter`/`array_reduce`/`array_walk`:函數式風格,可讀性強、易並行化。

結語

掌握四大迴圈語法特性、適用場景、控制流關鍵字差異,並養成「淺層巢狀、函數式優先、生成器處理大資料」的現代編碼習慣,能寫出高效、可讀、可維護的 PHP 迴圈代碼。

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