PHP 中遍歷關聯陣列(字串鍵)最標準、效能最好的方式是 foreach,支援同時取得鍵與值,且可參考傳遞修改原陣列。
<?php
$ages = ['zhangshan' => 14, 'lisi' => 15, 'sharejs' => 16];
foreach ($ages as $name => $age) {
echo "$name = $age\n";
}
// 輸出:
// zhangshan = 14
// lisi = 15
// sharejs = 16
?>
foreach ($ages as $name => &$age) {
$age++; // 直接修改原陣列
}
unset($age); // 重要:解除參考,避免後續迴圈污染
print_r($ages); // 所有年齡 +1
foreach ($ages as $age) {
// ...
}
$names = array_keys($ages);
$values = array_values($ages);
| 方法 | 適用場景 | 效能 | 備註 |
|---|---|---|---|
| foreach ($arr as $k => $v) | 標準遍歷、需鍵值 | 最快 | 內部指標自動重置 |
| foreach ($arr as &$v) | 需修改原值 | 快 | 必須 unset($v) |
| while (list($k,$v)=each($arr)) | 舊版相容 | 較慢 | PHP 7.2 棄用,8.0 移除 |
for ($i=0; $i| 數字索引陣列 | 中等 | 關聯陣列不適用 | |
| array_walk($arr, fn($v,$k)=>...) | 函式式處理 | 略慢 | 可攜帶 userdata |
unset($arr[$key])。foreach (... as &$v) 後未 unset($v),後續同變名迴圈會意外修改最後一個元素。RecursiveArrayIterator。掌握 foreach 細節,是寫出高效、無 Bug PHP 陣列處理程式的基礎。