三大陣列類型
| 類型 | 鍵名 | 對應 C++ | 建立範例 |
| 索引陣列 (Indexed) | 數字 (0 起) | vector | `$a = ['A','B','C'];` |
| 關聯陣列 (Associative) | 字串 | map | `$a = ['name'=>'Tom', 'age'=>20];` |
| 多維陣列 (Multidimensional) | 混合 | vector | `$a = ['dept'=>[['id'=>1,'name'=>'A']]];` |
宣告與存取
// 索引陣列
$names = ['Peter', 'Joe', 'Lily'];
echo $names[0]; // Peter
// 關聯陣列
$ages = ['Peter'=>32, 'Joe'=>30, 'Lily'=>28];
echo $ages['Peter']; // 32
// 多維陣列
$families = [
'Griffin' => ['Peter', 'Lois', 'Megan'],
'Brown' => ['Cleveland', 'Loretta', 'Junior']
];
echo $families['Griffin'][2]; // Megan
遍歷方式大全
1. `foreach` (最推薦,支援所有類型)
// 索引陣列
foreach ($names as $v) { echo $v; }
// 關聯陣列
foreach ($ages as $k => $v) { echo "$k: $v"; }
// 多維陣列 (巢狀 foreach)
foreach ($families as $family => $members) {
echo "$family: ";
foreach ($members as $m) echo "$m ";
}
2. `for` 迴圈 (僅索引陣列)
for ($i=0, $len=count($names); $i<$len; $i++) {
echo $names[$i];
}
3. `array_walk` / `array_map` (函數式風格)
array_walk($ages, function($v, $k) { echo "$k=$v
"; });
$upper = array_map('strtoupper', $names); // ['PETER','JOE','LILY']
實用技巧
- 合併陣列:`$merged = array_merge($a, $b);` (數值鍵重新索引,字串鍵後者覆蓋)。
- 鍵名/鍵值互換:`$flipped = array_flip($ages);`
- 檢查鍵名存在:`isset($arr['key'])` 或 `array_key_exists('key', $arr)`。
- 移除重複值:`$unique = array_unique($arr);`
- 隨機取樣:`$sample = array_rand($arr, 3);` (回傳鍵名陣列)。
效能提示
- 大量資料優先用 `foreach`,避免 `for` 重複呼叫 `count()`。
- 頻繁 `in_array` 查找時,改用 `isset($flip[$val])` (先 `array_flip`),O(1) 查找。
- PHP 7.0+ 陣列底層優化極大,普通應用無需過度優化。