PHP 提供 100+ 內置數組函數,掌握核心高頻函數能大幅提升開發效率。本文按功能分類整理,附帶代碼示例與輸出結果,適合作為桌面速查手冊。
從 offset 刪除 length 個元素,可選插入 replacement 數組。返回被刪除元素組成的數組,原數組被修改(鍵名重排)。
<?php $arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4]; $removed = array_splice($arr, 1, 2); // 刪除 b,c var_dump($removed); // ['b'=>2, 'c'=>3] var_dump($arr); // ['a'=>1, 'd'=>4] 鍵名保持關聯 ?>
唯一推薦的遍歷方式,自動重置內部指針,支持引用修改(&$value)。
<?php
$arr = ['x'=>10, 'y'=>20];
foreach ($arr as $k => &$v) { $v *= 2; }
unset($v); // 斷開引用,防污染
print_r($arr); // ['x'=>20, 'y'=>40]
?>
| 函數 | 排序依據 | 順序 | 鍵名關聯 |
|---|---|---|---|
| sort | 值 | 升序 | ❌ 重建 0..n |
| rsort | 值 | 降序 | ❌ |
| asort | 值 | 升序 | ✅ |
| arsort | 值 | 降序 | ✅ |
| ksort | 鍵 | 升序 | ✅ |
| krsort | 鍵 | 降序 | ✅ |
| usort/uksort/uasort | 自定義回調 | 自定 | 視函數而定 |
自然排序:natsort()、natcasesort()(不區分大小寫),處理 img1.png, img2.png, img10.png 此類字符串數字排序極佳。
array_sum():值求和。array_product():值求積。count() / sizeof():元素個數(遞歸模式 COUNT_RECURSIVE)。array_count_values():統計值出現次數。in_array($needle, $haystack, $strict):值是否存在($strict=true 類型也需匹配)。array_search($needle, $haystack, $strict):返回第一個匹配值的鍵名,未找到返回 false。array_keys($array, $search_value, $strict):返回所有匹配值的鍵名數組。array_filter($array, $callback, $flag):回調返回 true 保留。$flag 可傳 ARRAY_FILTER_USE_KEY / ARRAY_FILTER_USE_BOTH。array_unique($array, $sort_flags):去重(保留首次出現的鍵名)。SORT_STRING / SORT_NUMERIC / SORT_REGULAR 控制比較模式。array_slice($array, $offset, $length, $preserve_keys):切片(不修改原數組)。array_chunk($array, $size, $preserve_keys):分塊成二維數組(上文多列輸出即用此)。array_merge():合并(數字鍵重排,字符串鍵后覆蓋前)。array_merge_recursive()遞歸合并,相同字符串鍵值合并為數組。
array_intersect() / array_diff():交集/差集(比較值,保留第一個數組鍵名)。
array_intersect_key() / array_diff_key():按鍵名比較。
array_flip():鍵值互換(值必須唯一且為 int/string)。array_change_key_case($array, CASE_LOWER/UPPER):鍵名大小寫統一。array_combine($keys, $values):兩數組組合為關聯數組。shuffle():原地打亂(鍵名重排為 0..n)。array_rand($array, $num):隨機取 $num 個鍵名(不取值)。current() / key() / next() / prev() / end() / reset() / each()。<?php
// 需求:從日志數組中提取唯一 IP,按訪問次數降序,取前 10
$logs = [
['ip'=>'1.1.1.1','url'=>'/a'], ['ip'=>'2.2.2.2','url'=>'/b'],
['ip'=>'1.1.1.1','url'=>'/c'], ['ip'=>'3.3.3.3','url'=>'/d'],
['ip'=>'1.1.1.1','url'=>'/e'],
];
$ips = array_column($logs, 'ip'); // ['1.1.1.1','2.2.2.2','1.1.1.1','3.3.3.3','1.1.1.1']
$counts = array_count_values($ips); // ['1.1.1.1'=>3, '2.2.2.2'=>1, '3.3.3.3'=>1]
arsort($counts); // 保持關聯降序
$top10 = array_slice($counts, 0, 10, true); // 保持鍵名切片
print_r($top10);
?>