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

PHP 關聯陣列遍歷三種方法詳解

     編輯:PHP 綜合知識

PHP 陣列兩大類型

  • 數值索引陣列:鍵為 0,1,2... 類似 C 語言陣列。
  • 關聯陣列:鍵為字串或任意型別,類似 Hash Map / Dictionary。

方法一:foreach(推薦、最常用)

<?php
$sports = [
    'football' => 'good',
    'swimming' => 'very well',
    'running'  => 'not good'
];

foreach ($sports as $key => $value) {
    echo "{$key}: {$value}
"; } // 輸出: // football: good // swimming: very well // running: not good ?>

優點:語法清晰、支援鍵值同時取得、可配合引用修改原陣列(&$value)、PHP 7+ 效能最佳。

方法二:each() + while(舊式、已棄用)

<?php
$sports = ['football' => 'good', 'swimming' => 'very well', 'running' => 'not good'];

// 寫法 A:取得鍵值陣列
while ($elem = each($sports)) {
    echo "{$elem['key']}: {$elem['value']}
"; } // 寫法 B:list() 解構(PHP 7.2+ 棄用,8.0 移除) while (list($key, $value) = each($sports)) { echo "{$key}: {$value}
"; } ?>

缺點:each() 內部指標需手動 reset()、不支援 foreach 的引用修改、PHP 8.0 已移除,新專案勿用。

方法三:array_keys() + 索引迴圈(特定場景)

<?php
$keys = array_keys($sports);
for ($i = 0, $len = count($keys); $i < $len; $i++) {
    $key = $keys[$i];
    $value = $sports[$key];
    echo "{$key}: {$value}
"; } ?>

適用場景:需控制迴圈順序、跳過特定索引、或配合 array_slice 分頁處理大陣列。

進階技巧

需求寫法
只取值foreach ($arr as $val)
修改原陣列值foreach ($arr as &$val) $val = strtoupper($val);
修改鍵名(需重建陣列)$new = []; foreach ($arr as $k=>$v) $new[strtoupper($k)] = $v;
遞迴遍歷多維關聯陣列array_walk_recursive($arr, fn($v,$k)=>...)
檢查鍵是否存在isset($arr['key']) 或 array_key_exists('key', $arr)

效能對比(百萬級陣列)

// 測試環境:PHP 8.2, 100 萬筆關聯陣列
foreach ($arr as $k=>$v) { ... }     // ~45 ms 最快
for ($i=0;$i

最佳實踐建議

  1. 預設用 foreach:語意明確、效能最好、語法糖最豐富。
  2. 避免 each()/list():已棄用/移除,舊專案逐步重構。
  3. 大陣列分批處理:配合 array_chunk 或 Generator 避免記憶體峰值。
  4. 嚴格型別宣告:PHP 8+ 建議 foreach (array $arr as string $key => mixed $value)。

掌握 foreach 變體與陣列函式組合,應對 99% 遍歷場景綽綽有餘。

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