PHP 陣列核心函數分類速查
PHP 內建了豐富的陣列操作函數,掌握這些函數能大幅提升開發效率。本文將常用函數按功能分類整理,包含參數說明與回傳值,方便開發者快速查閱。
一、陣列建立與轉換
| 函數名 | 用途 | 語法格式 | 參數說明 | 回傳值 |
array() | 建立新陣列 | array(mixed ...$values) | 值的列表,或 key => value 形式 | 新陣列 |
array_combine() | 以一個陣列為鍵、另一個為值建立陣列 | array_combine(array $keys, array $values) | $keys: 鍵名陣列,$values: 數值陣列 | 合併後的陣列,失敗回傳 false |
range() | 建立指定範圍的陣列 | range(mixed $start, mixed $end, number $step = 1) | $start: 起始值,$end: 結束值,$step: 步長 | 包含範圍內元素的陣列 |
compact() | 將變數名與值組成陣列 | compact(mixed $varname, mixed ...$vars) | 變數名稱字串或包含變數名的陣列 | 以變數名為鍵、值為值的陣列 |
array_fill() | 以指定值填充陣列 | array_fill(int $start_index, int $count, mixed $value) | $start_index: 起始鍵名,$count: 元素數量,$value: 填充值 | 填充完成的陣列 |
二、陣列合併與拆分
| 函數名 | 用途 | 語法格式 | 參數說明 | 回傳值 |
array_chunk() | 將陣列分割成多個區塊 | array_chunk(array $array, int $length, bool $preserve_keys = false) | $array: 目標陣列,$length: 每區塊大小,$preserve_keys: 是否保留鍵名 | 多維陣列 |
array_merge() | 合併一或多個陣列 | array_merge(array ...$arrays) | 待合併的陣列列表 | 合併後的陣列,字串鍵名後者覆蓋前者,數字鍵名重新索引 |
三、陣列比較運算
| 函數名 | 用途 | 語法格式 | 回傳值 |
array_diff() | 計算陣列差集(只比較值) | array_diff(array $array, array ...$arrays) | 存在於第一個陣列但不在其他陣列中的值 |
array_intersect() | 計算陣列交集(只比較值) | array_intersect(array $array, array ...$arrays) | 所有陣列中都存在的值 |
四、陣列搜尋、切片與替換
| 函數名 | 用途 | 關鍵參數與行為 |
array_search() | 搜尋值並回傳對應鍵名 | $strict 參數決定是否檢查型別(===),找到回傳鍵名,否則 false |
array_slice() | 截取陣列片段 | $offset 可為負數(從末端倒數),$length 可為負數(截取到倒數第 N 位),$preserve_keys 決定是否保留原鍵名 |
array_splice() | 移除並選擇性替換陣列片段 | 直接修改原陣列(傳址),回傳被移除的元素,鍵名不保留 |
array_sum() | 計算陣列數值總和 | 忽略非數值元素,回傳整數或浮點數 |
in_array() | 檢查值是否存在於陣列 | $strict 參數啟用嚴格模式,回傳布林值 |
array_key_exists() | 檢查鍵名是否存在 | 別名 key_exists(),回傳布林值 |
五、陣列指標操作
這組函數操作陣列內部指標,常用於 while(list($k,$v)=each($arr)) 等舊式迴圈:
key():取得當前元素鍵名
current() / pos():取得當前元素值
next()、prev():移動指標到下一個/上一個
end()、reset():移動到最後/第一個元素
each():回傳當前鍵值對並將指標前進
六、陣列堆疊與佇列操作
| 函數名 | 行為 | 回傳值 |
array_push() | 將一或多個元素壓入陣列末尾 | 新陣列長度 |
array_pop() | 彈出陣列最後一個元素 | 被彈出的元素值 |
array_shift() | 移除陣列第一個元素(鍵名重新索引) | 被移除的元素值 |
array_unshift() | 在陣列開頭插入一或多個元素 | 新陣列長度 |
七、陣列鍵值操作
| 函數名 | 用途 | 備註 |
shuffle() | 打亂陣列順序 | 保留鍵名關聯,回傳布林值 |
count() | 計算元素數量 | 可設 COUNT_RECURSIVE 遞歸計算多維陣列 |
array_flip() | 交換鍵與值 | 值必須為有效鍵型別(整數/字串) |
array_keys() | 取得所有鍵名 | 可選 $search_value 與 $strict 過濾特定值的鍵 |
array_values() | 取得所有值並重新索引 | 回傳數字索引陣列 |
array_reverse() | 回傳順序反轉的陣列 | $preserve_keys 決定是否保留原鍵名 |
array_count_values() | 統計所有值出現次數 | 回傳「值=>次數」的陣列 |
array_rand() | 隨機取出一或多個鍵名 | 回傳鍵名(非值),$num>1 時回傳鍵名陣列 |
array_unique() | 移除重複值 | 保留首次出現的鍵名,值排序後比較 |
八、陣列排序函數對照表
| 函數 | 排序依據 | 順序 | 保留鍵名 | 備註 |
sort() | 值 | 低到高 | 否 | 重新索引 |
rsort() | 值 | 高到低 | 否 | 重新索引 |
asort() | 值 | 低到高 | 是 | 關聯陣列常用 |
arsort() | 值 | 高到低 | 是 | |
ksort() | 鍵名 | 低到高 | 是 | |
krsort() | 鍵名 | 高到低 | 是 | |
natsort() | 值(自然排序) | 自然順序 | 是 | 如 "img2" < "img10" |
natcasesort() | 值(自然排序,不分大小寫) | 自然順序 | 是 | |
所有排序函數皆直接修改原陣列(傳址),成功回傳 true,失敗回傳 false。可選 $flags 參數控制比較模式(SORT_REGULAR、SORT_NUMERIC、SORT_STRING、SORT_LOCALE_STRING、SORT_NATURAL、SORT_FLAG_CASE)。
資料整理自《戰地日記_LAMP兄弟連》分享版,部分函數說明已修正補全。