陣列是 PHP 中最常用、最靈活的資料結構,可視為記憶體中的「小型資料庫」,支援多種資料型別混存,能大幅減少 I/O 與資料庫頻繁存取,提升效能。本文系統整理陣列的建立、賦值、遍歷、銷毀等核心操作,並補充實務常見陷阱與進階技巧。
$fruits = ['apple', 'banana', 'orange'];
$user = ['name' => 'John', 'age' => 30, 'active' => true];
$colors = array('red', 'green', 'blue');
$config = array('host' => 'localhost', 'port' => 3306);
$arr = [];
$arr[] = 'first'; // 鍵 0
$arr[] = 'second'; // 鍵 1
$arr['key'] = 'value'; // 指定字串鍵
echo $fruits[0]; // apple
echo $user['name']; // John
// 只需值
foreach ($fruits as $fruit) {
echo $fruit . PHP_EOL;
}
// 需要鍵值
foreach ($user as $key => $value) {
echo "$key: $value" . PHP_EOL;
}
// 參考傳遞修改原陣列
foreach ($data as &$item) {
$item = strtoupper($item);
}
unset($item); // 解除參考,避免後續誤用
array_keys()、array_values()、array_flip()array_map()、array_filter()、array_reduce() 函數式風格list() 解構:foreach ($pairs as [$a, $b])(PHP 7.1+)$arr[1] = 'updated';
$arr['new_key'] = 'new value';
unset($arr[1]); // 刪除指定鍵,索引不會自動重排
unset($arr); // 銷毀整個變數
注意:unset() 刪除後,數字索引不會自動重新排序,若需連續索引可用 array_values($arr) 重建。
isset($arr['key']):鍵存在且非 nullarray_key_exists('key', $arr):鍵存在(含 null 值)in_array($value, $arr):值存在(嚴格模式傳 true)count($arr) / sizeof($arr):元素個數| 陷阱 | 說明 | 建議 |
|---|---|---|
| 字串當陣列存取 | $str[0] 可取字元,但語意混淆 | 字串操作用 mb_substr()、str_split() |
| foreach 參考殘留 | 迴圈後 $item 仍為參考,後續賦值污染陣列 | 迴圈結束立即 unset($item) |
| 大量資料記憶體耗盡 | 陣列載入全量資料 | 使用 Generator (yield) 或分頁處理 |
| 多維陣列排序 | usort / array_multisort 易寫錯 | 善用 arrow function (fn) 簡化回呼 |
| 鍵名大小寫敏感 | $arr['Key'] != $arr['key'] | 統一命名規範,或用 array_change_key_case() |
array_merge()(數字鍵重排)、+ 運算子(保留第一個陣列鍵值)array_diff()、array_intersect()、array_diff_key()array_rand($arr, 3)json_encode($arr, JSON_UNESCAPED_UNICODE)[$a, $b, $c] = $arr;(PHP 7.1+)[...$arr1, ...$arr2](PHP 7.4+)熟練掌握陣列操作,是寫出高效、可維護 PHP 程式的基石。建議開發者養成「先定義型別結構、再操作資料」的習慣,並善用 IDE 靜態分析與單元測試守護陣列邏輯正確性。