PHP 擁有超過 80 個陣列相關函數,本文整理開發中最高頻的 30+ 函數,附上簽名、行為說明、實戰範例與常見誤區,作為快速查閱手冊。
| 函數 | 用途 | 範例 |
|---|---|---|
range($start, $end, $step=1) | 建立等差數列陣列 | range(1,5) → [1,2,3,4,5] |
array_fill($startIdx, $count, $value) | 以固定值填充指定長度 | array_fill(3, 4, 'x') → [3=>'x',4=>'x',5=>'x',6=>'x'] |
array_fill_keys($keys, $value) | 以指定鍵名建立陣列 | array_fill_keys(['a','b'], 0) → ['a'=>0,'b'=>0] |
array_combine($keys, $values) | 合併兩陣列為鍵值對 | array_combine(['a','b'],[1,2]) → ['a'=>1,'b'=>2] |
| 函數 | 行為 | 注意事項 |
|---|---|---|
array_change_key_case($arr, $case=CASE_LOWER) | 將一維陣列鍵名統一大/小寫 | 不遞迴處理多維陣列;不修改原陣列 |
array_flip($arr) | 交換鍵與值 | 值必須為 string/int;重複值會覆蓋 |
array_keys($arr, $search=null) | 取得所有鍵名,或指定值的鍵名 | 嚴格比較需自行實作 |
array_values($arr) | 重設數字索引 (0,1,2...) | 常用於 unset 後重排索引 |
| 函數 | 差異重點 |
|---|---|
array_merge($a, $b...) | 數字鍵重新索引;字串鍵後者覆蓋前者 |
array_merge_recursive($a, $b...) | 相同字串鍵合併為陣列,不覆蓋 |
$a + $b (聯集運算子) | 鍵名衝突時保留左側,不重新索引數字鍵 |
array_chunk($arr, $size, $preserveKeys=false) | 分割成多維陣列,每組 $size 個 |
array_slice($arr, $offset, $len=null, $preserve=false) | 切片;$preserve=true 保留字串鍵 |
array_splice($arr, $offset, $len, $replacement) | 移除並可選替換;修改原陣列 |
| 函數 | 用途 | 回傳值 |
|---|---|---|
in_array($needle, $haystack, $strict=false) | 檢查值是否存在 | bool |
array_search($needle, $haystack, $strict=false) | 找值對應的第一個鍵 | mixed/false |
array_key_exists($key, $arr) | 檢查鍵是否存在 | bool |
array_filter($arr, $callback) | 回呼函數回傳 true 者保留 | 新陣列 (保留鍵) |
array_unique($arr, $sortFlags=SORT_STRING) | 移除重複值,保留第一次出現 | 新陣列 |
array_count_values($arr) | 統計各值出現次數 | ['value'=>count] |
array_column($arr, $colKey, $indexKey=null) | 提取多維陣列單一欄位 | 一維陣列 |
| 函數 | 排序依據 | 鍵名處理 |
|---|---|---|
sort() | 值升序 | 重設數字索引 |
rsort() | 值降序 | 重設數字索引 |
asort() | 值升序 | 保留鍵名關聯 |
arsort() | 值降序 | 保留鍵名關聯 |
ksort() | 鍵升序 | 保留關聯 |
krsort() | 鍵降序 | 保留關聯 |
uasort() | 自定義比較函數 (值) | 保留關聯 |
uksort() | 自定義比較函數 (鍵) | 保留關聯 |
array_multisort() | 多陣列/多欄位同步排序 | 見專文 |
array_walk($arr, $callback, $userdata):一維走訪,可透過引用 &$value 修改原陣列。array_walk_recursive($arr, $callback):遞迴走訪所有葉子節點,不改變結構。array_map($callback, $arr1, $arr2...):對每個元素應用回呼,回傳新陣列,可同時處理多個陣列。array_reduce($arr, $callback, $initial):將陣列減縮為單一值 (如求和、串接字串)。array_merge 會重設數字鍵 → 若需保留數字鍵用 + 運算子。in_array 預設鬆散比較 → 'abc' == 0 為 true,嚴格模式請加 true 參數。array_filter 不傳回呼時 → 移除所有等同 false 的值 (0, '', null, false, [])。array_unique 只比較值 → 多維陣列去重需自行實作 (如 serialize + array_unique + unserialize)。shuffle 會重設索引 → 關聯陣列打亂順序請用 uksort($arr, fn()=>rand(-1,1))。isset($arr[$key]) 判斷鍵存在,比 array_key_exists 快 2-3 倍。in_array 查找時,先 $flip = array_flip($arr) 再用 isset($flip[$val]),複雜度從 O(n) 降為 O(1)。count($arr),預先存入變數。