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

PHP 數組循環遍歷完全指南:for、foreach 與進階技巧

     編輯:PHP 相關知識

數組是 PHP 最核心的數據結構,高效遍歷是基本功。本文對比 for、foreach 及進階技巧,助你寫出優雅高效的循環代碼。

基礎:數值索引數組 + for 循環

$artists = ['Metallica', 'Evanescence', 'Linkin Park', 'Guns n Roses'];
for ($i = 0; $i < count($artists); $i++) {
    echo "<li>{$artists[$i]}</li>";
}

優化點:count() 提前緩存 $len = count($artists),避免每次迭代調用函數。

進階:關聯數組鍵值分離

$menu = [
    'breakfast' => 'bacon and eggs',
    'lunch'     => 'roast beef',
    'dinner'    => 'lasagna'
];
$keys   = array_keys($menu);   // ['breakfast','lunch','dinner']
$values = array_values($menu); // ['bacon and eggs','roast beef','lasagna']

現代首選:foreach 一站式遍歷

$artists = ['Metallica', 'Evanescence', 'Linkin Park', 'Guns n Roses'];
foreach ($artists as $artist) {
    echo "<li>$artist</li>";
}

優勢:

  • 無需計數器、無需 count()、自動指針移動。
  • 直接獲取值,代碼極簡。
  • 原生支持關聯數組:foreach ($menu as $meal => $dish) 同時獲取鍵值。

引用修改原數組值

foreach ($data as &$value) {
    $value = trim($value); // 原數組被修改
}
unset($value); // 斷開引用,防止後續誤用

迭代器模式:處理海量/懶加載數據

實現 Iterator 介面或使用生成器:

function hugeDataGenerator() {
    for ($i = 0; $i < 1000000; $i++) yield $i * 2;
}
foreach (hugeDataGenerator() as $val) {
    // 僅在需要時計算,內存常數級
}

性能對比經驗值

場景推薦方式備註
小型數值索引數組foreach可讀性最佳,性能差異微乎其微
需索引操作/逆序/步長for靈活控制索引
關聯數組foreach ($arr as $k => $v)唯一合理選擇
需修改原值foreach (&$v)注意 unset 引用
超大/無限數據集Generator/Iterator避免一次性載入內存

常見錯誤避坑

  1. foreach ($arr as $v) { $v = ... } 不加 & 修改的是副本,原數組不變。
  2. 循環中 unset($arr[$k]) 導致指針錯亂,改用 array_filter() 或先收集待刪除鍵再二次處理。
  3. 多維數組遞歸遍歷時注意引用傳遞與深度限制,防止棧溢出。

選對遍歷方式,代碼既快又美。

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