PHP 提供 foreach 與 for 兩種陣列遍歷方式,雖然常能達到相同結果,但底層機制與效能表現截然不同。掌握兩者特性,能寫出更高效、可讀性更強的代碼。
假設需在關聯陣列中查找值為「西」的鍵:
$tar = [
1 => '東', 2 => '西', 3 => '南', 4 => '北',
5 => '東南', 6 => '西南', 7 => '東北', 8 => '西北',
9 => '南北', 10 => '東西'
];
$target = '西';
foreach ($tar as $key => $value) {
if ($value === $target) {
echo $value . '-' . $key; // 輸出:西-2
break;
}
}
for ($i = 1; $i <= count($tar); $i++) {
if ($tar[$i] === $target) {
echo $tar[$i] . '-' . $i; // 輸出:西-2
break;
}
}
| 維度 | foreach | for |
|---|---|---|
| 適用場景 | 關聯陣列、物件、任意可迭代結構 | 數值索引陣列、需精確控制索引邏輯 |
| 索引獲取 | 自動同時取得 $key 與 $value | 需手動管理索引變數 $i |
| 長度計算 | 內部自動處理,無需預知長度 | 每次迴圈常呼叫 count()(建議預存長度) |
| 效能表現 | 優化後的內部迭代器,速度更快 | 較慢,尤其在大型陣列中頻繁計算長度時 |
| 代碼可讀性 | 語意清晰,符合「遍歷」語義 | 較為底層,邏輯分散 |
$len = count($arr),減少函數呼叫開銷。掌握細節差異,才能在效能敏感場景做出正確選擇。