陣列是 PHP 最核心、最靈活的資料結構,同時扮演列表、映射、集合、堆疊、佇列等角色。本文系統梳理陣列創建、訪問、遍歷、多維操作與常見陷阱。
$colors = ['Red', 'Green', 'Blue']; // 自動鍵 0,1,2
$colors[5] = 'Yellow'; // 鍵可不連續
$age = ['Peter'=>32, 'Quagmire'=>30];
$age['Joe'] = 34; // 動態新增
$families = [
'Griffin' => ['Peter', 'Lois', 'Megan'],
'Quagmire' => ['Glenn'],
];
echo $families['Griffin'][2]; // Megan
| 方式 | 適用場景 | 鍵值獲取 | 效能 |
|---|---|---|---|
foreach ($arr as $v) | 只需值 | 僅值 | 快(值拷貝但 Copy-on-Write) |
foreach ($arr as $k => $v) | 需鍵值 | 鍵+值 | 快 |
for ($i=0; $i<count($arr); $i++) | 需索引控制 | 索引+值 | 中(每次 count()) |
while (list($k,$v)=each($arr)) | 需內部指針控制 | 鍵+值 | 慢(已棄用 PHP 7.2,移除 PHP 8.0) |
PHP 陣列為有序映射,遍歷順序 = 插入順序。無論鍵為數字或字符串:
$arr[2] = 'a'; $arr[1] = 'b'; $arr[0] = 'c';
foreach ($arr as $k=>$v) echo "$k=$v "; // 輸出:2=a 1=b 0=c
// 傳值遍歷(不影響原陣列)
foreach ($arr as $v) { $v *= 2; }
// 傳引用遍歷(修改原陣列)
foreach ($arr as &$v) { $v *= 2; }
unset($v); // 必須銷毀引用,防止後續誤用
// 或用鍵名賦值
foreach ($arr as $k => $v) { $arr[$k] *= 2; }
array_key_exists、isset(見 177365 陷阱)。array_push/pop/shift/unshift、unset($arr[$k])、array_splice。array_merge(字符串鍵後覆蓋前,數字鍵重新索引)、+ 運算符(鍵不覆蓋)。in_array(嚴格模式第 3 參數 true)、array_search、array_keys。array_column 提取列、array_map 映射、array_filter 過濾、array_reduce 歸約。$str = 'abc';
echo $str['x']; // 'a' —— 字符串鍵被轉為 0,極易導致邏輯錯誤
// 防禦:操作前 is_array($var) 判斷
PHP 陣列功能極其強大,掌握創建、遍歷、修改、常用函數與順序語義,能讓數據處理代碼簡潔高效。養成 foreach ($arr as $k=>$v) 與 array_key_exists 的習慣,避開 90% 陣列坑。