本文目录导读:

- 基础操作(增删改查)
- 查找与判断
- 排序函数(常用)
- 数组合并与切割
- 数组运算(集合操作)
- 回调函数(高级用法)
- 其他常用
- PHP 8+ 新特性
- 实用技巧
- 记忆方法
PHP 提供了非常丰富的数组函数,下面按使用频率和功能分类给你整理一份最常用的清单:
基础操作(增删改查)
插入与删除
| 函数 |
作用 |
示例 |
array_push() |
尾部追加一个或多个元素 |
array_push($arr, 4, 5) |
array_pop() |
弹出尾部元素(删尾) |
$last = array_pop($arr) |
array_unshift() |
头部插入一个或多个元素 |
array_unshift($arr, 0) |
array_shift() |
删除头部元素(删头) |
$first = array_shift($arr) |
unset() |
删除指定键 |
unset($arr['key']) |
键值操作
| 函数 |
作用 |
array_keys() |
返回所有键 |
array_values() |
返回所有值(重新索引) |
array_key_exists() |
判断键是否存在 |
isset() |
判断键是否存在且值不为null |
array_fill_keys() |
用指定键和值填充数组 |
array_flip() |
交换键和值 |
查找与判断
| 函数 |
作用 |
in_array() |
值是否存在(松散比较) |
array_search() |
找到值返回键,否则false |
array_key_exists() |
键是否存在 |
array_unique() |
去除重复值 |
array_count_values() |
统计每个值出现的次数 |
$fruits = ['apple', 'banana', 'apple', 'orange'];
print_r(array_count_values($fruits));
// 输出:['apple' => 2, 'banana' => 1, 'orange' => 1]
排序函数(常用)
| 函数 |
排序方式 |
保持键名 |
sort() |
值升序 |
❌ |
rsort() |
值降序 |
❌ |
asort() |
值升序 |
✅ |
arsort() |
值降序 |
✅ |
ksort() |
键升序 |
✅ |
krsort() |
键降序 |
✅ |
usort() |
用户自定义 |
❌ |
uasort() |
用户自定义 |
✅ |
$ages = ['张三' => 25, '李四' => 30, '王五' => 22];
asort($ages); // 按年龄排序,保留姓名关联
print_r($ages); // ['王五' => 22, '张三' => 25, '李四' => 30]
数组合并与切割
| 函数 |
作用 |
array_merge() |
合并一个或多个数组(后面的覆盖前面) |
array_merge_recursive() |
递归合并,重复键生成子数组 |
array_combine() |
两个数组分别作为键和值 |
array_slice() |
从数组取一段 |
array_splice() |
删除/替换一段,返回被删元素 |
array_chunk() |
分割成多个子数组 |
$keys = ['a', 'b', 'c'];
$values = [1, 2, 3];
$result = array_combine($keys, $values);
// 输出:['a' => 1, 'b' => 2, 'c' => 3]
数组运算(集合操作)
| 函数 |
作用 |
array_diff() |
差集(值对比) |
array_diff_key() |
差集(键对比) |
array_intersect() |
交集(值对比) |
array_intersect_key() |
交集(键对比) |
array_sum() |
求和 |
array_product() |
求积 |
$arr1 = [1, 2, 3, 4];
$arr2 = [3, 4, 5, 6];
print_r(array_intersect($arr1, $arr2)); // [3, 4]
print_r(array_diff($arr1, $arr2)); // [1, 2]
回调函数(高级用法)
| 函数 |
作用 |
array_map() |
每个元素应用回调,返回新数组 |
array_filter() |
过滤元素(回调返回true保留) |
array_reduce() |
迭代归约数组为单个值 |
array_walk() |
遍历修改原数组的值 |
// map:每个数乘2
$arr = [1, 2, 3];
$result = array_map(fn($n) => $n * 2, $arr); // [2, 4, 6]
// filter:取出偶数
$even = array_filter($arr, fn($n) => $n % 2 === 0); // [2]
// reduce:求和
$sum = array_reduce($arr, fn($carry, $n) => $carry + $n, 0); // 6
其他常用
| 函数 |
作用 |
count() / sizeof() |
数组长度 |
implode() |
数组转字符串 |
explode() |
字符串转数组 |
array_rand() |
随机取一个或多个键 |
shuffle() |
随机打乱 |
array_reverse() |
反转数组 |
extract() |
将数组键导出为变量 |
compact() |
变量名转为数组 |
array_column() |
提取多维数组某一列 |
PHP 8+ 新特性
// PHP 8.0+ 新函数
$arr = [1, 2, 3];
// array_is_list() - 判断是否为列表(连续索引)
array_is_list($arr); // true
array_is_list(['a' => 1]); // false
// PHP 8.4+ 新增
array_find($arr, fn($v) => $v > 1); // 找到第一个匹配元素
array_any($arr, fn($v) => $v > 5); // 是否任一匹配
array_all($arr, fn($v) => $v > 0); // 是否全部匹配
实用技巧
去除关联数组中的指定键
$data = ['name' => 'Alice', 'age' => 30, 'email' => 'a@b.com'];
$filtered = array_diff_key($data, array_flip(['email']));
两个数组交叉比较(订单交集)
$cart = ['item1', 'item2', 'item3'];
$inventory = ['item2', 'item3', 'item4'];
$available = array_intersect($cart, $inventory);
数组转查询字符串
$params = ['name' => 'Alice', 'age' => 30];
$query = http_build_query($params); // "name=Alice&age=30"
记忆方法
增删: push/pop/unshift/shift
查: in_array/array_search/key_exists
排序: sort/asort/ksort + r(反向)
合并: merge/combine/slice/chunk
集合: diff/intersect/sum
回调: map/filter/reduce
如果做开发的话,建议把 array_map、array_filter、array_reduce 这三个掌握熟练,它们是函数式编程的基石,能让代码简洁很多。