陣列是 PHP 中最常用的資料結構之一,掌握陣列的核心操作對於高效開發至關重要。本文系統整理陣列值的提取、分割、轉換、查找、統計以及遍歷與排序的實用技巧,並附上可直接執行的程式碼範例,適合初學者快速入門與進階開發者查閱參考。
使用 list() 可一次將陣列元素賦值給多個變數:
$arr = ['apple', 'banana', 'cherry'];
list($a, $b, $c) = $arr; // $a='apple', $b='banana', $c='cherry'
// 變數多於元素時,多餘變數設為 NULL
list($x, $y, $z, $w) = $arr; // $w = NULL
// 以逗號跳過特定元素
list($first, , $third) = $arr; // $first='apple', $third='cherry'
$arr = ['a', 'b', 'c', 'd', 'e'];
$sub = array_slice($arr, 1, 3); // ['b', 'c', 'd']
// array_splice 刪除並插入
array_splice($arr, 1, 2, ['x', 'y']); // $arr 變為 ['a', 'x', 'y', 'd', 'e']
array_chunk($array, $size, $preserve_keys=false) 可將陣列按指定大小分塊:
$arr = range(1, 10);
$chunks = array_chunk($arr, 3);
// 結果:[[1,2,3], [4,5,6], [7,8,9], [10]]
$arr = ['id' => 1, 'name' => 'Tom', 'age' => 20];
$keys = array_keys($arr); // ['id', 'name', 'age']
$values = array_values($arr); // [1, 'Tom', '20'] 索引重置
// 檢查鍵是否存在
isset($arr['name']); // true (效能較好)
array_key_exists('name', $arr); // true (也檢查 NULL 值)
extract($arr):將陣列鍵值對導入當前符號表為變數(需注意覆蓋風險)。compact('var1', 'var2'):將指定變數組成關聯陣列。$arr = ['a', 'b', 'c'];
in_array('b', $arr); // true
array_search('b', $arr); // 1 (返回鍵名)
array_sum($arr); // 總和
array_merge($a, $b); // 合併 (數值鍵重置,字串鍵後者覆蓋)
array_diff($a, $b); // 差集 (只比較值)
array_filter($arr, fn); // 過濾
| 操作 | 函數 | 說明 |
|---|---|---|
| 去重 | array_unique() | 保留首次出現的鍵名 |
| 交集 | array_intersect() | 保留第一個陣列的鍵名 |
| 入堆疊 | array_push() | 尾部新增 |
| 出堆疊 | array_pop() | 尾部移除並返回 |
| 入佇列 | array_unshift() | 頭部新增 |
| 出佇列 | array_shift() | 頭部移除並返回 |
$indexed = ['a', 'b', 'c'];
$assoc = ['a' => 'aaaa', 'b' => 'bbbb', 'c' => 'cccc'];
// for 迴圈 (僅適用連續數值索引)
for ($i = 0; $i < count($indexed); $i++) {
echo $indexed[$i];
}
// foreach 僅取值
foreach ($indexed as $val) { echo $val; }
// foreach 取鍵值
foreach ($assoc as $key => $val) { echo "$key => $val"; }
PHP 內部維護一個陣列指標,相關函數:
current()、key():取得當前元素值與鍵next()、prev()、reset()、end():移動指標each():返回當前鍵值並將指標前移while (list($k, $v) = each($assoc)) {
echo "$k => $v\n";
}
// array_walk 為每個元素執行回呼
array_walk($assoc, function($val, $key) {
echo "walk: $key => $val\n";
});
// array_reduce 累積運算
$sumSq = array_reduce([1,2,3,4,5], function($carry, $item) {
return $carry + $item * $item;
}, 0); // 55
PHP 提供三大排序維度 × 三種順序 = 9 個核心排序函數:
| 維度 | 升序 | 降序 | 使用者自定 |
|---|---|---|---|
| 依鍵名排序 | ksort() | krsort() | uksort() |
| 依值排序 (不保留鍵) | sort() | rsort() | usort() |
| 依值排序 (保留鍵) | asort() | arsort() | uasort() |
array_multisort():多陣列或多維陣列同步排序array_reverse():翻轉陣列,數值鍵重置array_flip():交換鍵與值 (值必須唯一)shuffle():隨機打亂順序熟練掌握上述函數與遍歷方式,能讓你在處理資料集時寫出更簡潔、高效的程式碼。建議在實際專案中根據資料結構特性選擇最合適的函數,並注意引用傳遞與值傳遞的差異以避免副作用。