PHP 陣列是有序的鍵值對集合,支援一維、多維、關聯陣列與數字索引陣列。內建超過 80 個陣列函數,涵蓋建立、合併、分割、搜尋、排序、過濾、映射、走訪、堆疊/佇列操作等。所有函數內建核心,無需安裝。
| 函數 | 說明 |
|---|---|
array() / [] | 建立陣列 (短語法 PHP 5.4+) |
array_change_key_case() | 將所有鍵名轉大寫/小寫 |
array_chunk() | 分割陣列為指定大小的區塊 |
array_column() | 取得多維陣列中單一欄位的值 (PHP 5.5+) |
array_combine() | 以一個陣列為鍵、另一個為值建立新陣列 |
array_count_values() | 統計所有值出現次數 |
array_diff() | 差集 (僅比較值) |
array_diff_assoc() | 差集 (比較鍵名與值) |
array_diff_key() | 差集 (僅比較鍵名) |
array_diff_uassoc() | 差集 (使用者自訂鍵名比較函數) |
array_diff_ukey() | 差集 (使用者自訂鍵名比較函數) |
array_fill() | 以指定值填充陣列 |
array_fill_keys() | 以指定鍵名與值填充陣列 |
array_filter() | 回呼函數過濾元素 |
array_flip() | 交換鍵名與值 |
array_intersect() | 交集 (僅比較值) |
array_intersect_assoc() | 交集 (比較鍵名與值) |
array_intersect_key() | 交集 (僅比較鍵名) |
array_intersect_uassoc() | 交集 (使用者自訂鍵名比較) |
array_intersect_ukey() | 交集 (使用者自訂鍵名比較) |
array_key_exists() | 檢查鍵名是否存在 |
array_keys() | 取得所有鍵名 |
array_map() | 回呼函數處理每個值,返回新陣列 |
array_merge() | 合併一或多個陣列 (數字鍵重新索引) |
array_merge_recursive() | 遞迴合併 (相同字串鍵合併為陣列) |
array_multisort() | 多陣列或多維陣列排序 |
array_pad() | 補齊指定長度與值 |
array_pop() | 彈出最後一個元素 (堆疊) |
array_product() | 計算所有值乘積 |
array_push() | 壓入一或多個元素到末尾 (堆疊) |
array_rand() | 隨機取出一或多個鍵名 |
array_reduce() | 回呼函數遞迴簡化為單一值 |
array_replace() | 後續陣列值取代第一個陣列 |
array_replace_recursive() | 遞迴取代 |
array_reverse() | 反轉順序返回新陣列 |
array_search() | 搜尋值返回對應鍵名 |
array_shift() | 移除第一個元素並返回 (佇列) |
array_slice() | 取得陣列片段 |
array_splice() | 移除並替換指定片段 |
array_sum() | 計算所有值總和 |
array_udiff() | 差集 (使用者自訂值比較函數) |
array_udiff_assoc() | 差集 (內建比較鍵名、使用者比較值) |
array_udiff_uassoc() | 差集 (兩個使用者比較函數) |
array_uintersect() | 交集 (使用者自訂值比較) |
array_uintersect_assoc() | 交集 (內建比較鍵名、使用者比較值) |
array_uintersect_uassoc() | 交集 (兩個使用者比較函數) |
array_unique() | 移除重複值 |
array_unshift() | 在開頭插入一或多個元素 |
array_values() | 取得所有值 (重新數字索引) |
array_walk() | 對每個元素應用使用者函數 |
array_walk_recursive() | 遞迴應用使用者函數 |
arsort() | 關聯陣列按值降序排序 (保持鍵名關聯) |
asort() | 關聯陣列按值升序排序 |
compact() | 以變數名與值建立陣列 |
count() / sizeof() | 計算元素數量 |
current() / pos() | 取得目前元素值 |
each() | 取得目前鍵/值對並前進指標 (PHP 7.2 棄用) |
end() | 指標指向最後一個元素 |
extract() | 從陣列匯入變數到符號表 |
in_array() | 檢查值是否存在 |
key() | 取得目前鍵名 |
krsort() | 關聯陣列按鍵名降序排序 |
ksort() | 關聯陣列按鍵名升序排序 |
list() | 將陣列值賦予變數 |
natcasesort() | 自然排序 (不分大小寫) |
natsort() | 自然排序 |
next() | 指標前進一位 |
prev() | 指標後退一位 |
range() | 建立指定範圍的陣列 |
reset() | 指標指向第一個元素 |
rsort() | 數值陣列降序排序 |
shuffle() | 隨機打亂順序 |
sort() | 數值陣列升序排序 |
uasort() | 使用者自訂比較函數排序值 (保持鍵名) |
uksort() | 使用者自訂比較函數排序鍵名 |
usort() | 使用者自訂比較函數排序值 (重新索引) |
<?php $arr1 = ['a' => 1, 'b' => 2]; $arr2 = ['c' => 3, 'd' => 4]; $merged = array_merge($arr1, $arr2); // ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4] $combined = array_combine(['x','y'], [10,20]); // ['x'=>10, 'y'=>20] ?>
<?php $numbers = [1,2,3,4,5,6]; $even = array_filter($numbers, fn($n) => $n % 2 === 0); // [2,4,6] $squared = array_map(fn($n) => $n * $n, $numbers); // [1,4,9,16,25,36] ?>
<?php
$users = [
['id'=>1, 'name'=>'Alice', 'email'=>'alice@example.com'],
['id'=>2, 'name'=>'Bob', 'email'=>'bob@example.com'],
];
$emails = array_column($users, 'email'); // ['alice@example.com', 'bob@example.com']
?>
<?php $data = ['orange'=>3, 'apple'=>1, 'banana'=>2]; asort($data); // ['apple'=>1, 'banana'=>2, 'orange'=>3] ksort($data); // ['apple'=>1, 'banana'=>2, 'orange'=>3] (鍵名已有序) usort($values, fn($a,$b) => $b - $a); // 數值降序 ?>
<?php $stack = []; array_push($stack, 'a', 'b', 'c'); $last = array_pop($stack); // 'c' $queue = []; array_push($queue, 'first', 'second'); $first = array_shift($queue); // 'first' ?>
SplDoublyLinkedList 或 SplQueue/SplStack。array_unique() 會保留首次出現的鍵名,若不需保留鍵名可搭配 array_values() 重新索引。array_walk_recursive() 僅遍歷葉子節點,配合引用參數可修改原陣列。usort() 等使用者比較函數較慢,能用內建 sort()/asort() 盡量優先。