PHP 中常用的数组处理辅助函数总结(实战向)
PHP 中常用的数组处理辅助函数总结(实战向)
在 PHP 开发中,数组几乎无处不在:
接口返回值、数据库查询结果、表单数据、配置项、统计数据……
如果没有一套好用的数组处理辅助函数,代码往往会变得又长又乱。
本文总结了一些高频、实用、工程中常见的数组处理技巧与辅助函数,帮助你写出更优雅、更易维护的 PHP 代码。
一、判断数组是否为空 / 存在键
1. 判断数组是否为空
if (empty($arr)) {
// 数组为空
}
推荐封装:
function array_is_empty($arr): bool
{
return empty($arr) || !is_array($arr);
}
2. 判断键是否存在
array_key_exists('name', $arr);
isset($arr['name']);
区别:
| 方法 | 特点 |
|---|---|
| isset | 值为 null 时返回 false |
| array_key_exists | 即使是 null 也返回 true |
二、安全获取数组值(防止未定义下标)
推荐写法
$value = $arr['key'] ?? 'default';
封装辅助函数
function array_get(array $arr, string $key, $default = null)
{
return $arr[$key] ?? $default;
}
支持多级数组
function array_get_deep(array $arr, string $path, $default = null)
{
$keys = explode('.', $path);
foreach ($keys as $key) {
if (!isset($arr[$key])) {
return $default;
}
$arr = $arr[$key];
}
return $arr;
}
使用示例:
$email = array_get_deep($user, 'profile.contact.email');
三、数组字段筛选(只保留需要的字段)
原始写法
$result = [
'id' => $user['id'],
'name' => $user['name'],
];
辅助函数封装
function array_only(array $arr, array $keys): array
{
return array_intersect_key($arr, array_flip($keys));
}
使用:
$user = array_only($user, ['id', 'name', 'email']);
四、删除数组中的指定字段
function array_except(array $arr, array $keys): array
{
return array_diff_key($arr, array_flip($keys));
}
$data = array_except($data, ['password', 'token']);
五、数组重组(按某个字段做 key)
场景
数据库返回:
[
['id' => 1, 'name' => 'A'],
['id' => 2, 'name' => 'B'],
]
希望变成:
[
1 => ['id' => 1, 'name' => 'A'],
2 => ['id' => 2, 'name' => 'B'],
]
辅助函数
function array_key_by(array $arr, string $key): array
{
$result = [];
foreach ($arr as $item) {
if (isset($item[$key])) {
$result[$item[$key]] = $item;
}
}
return $result;
}
六、提取数组中的某一列
原生函数
$names = array_column($users, 'name');
提取并按 ID 作为 key
$map = array_column($users, 'name', 'id');
结果:
[1 => 'Tom', 2 => 'Jack']
七、数组去重(按字段)
function array_unique_by(array $arr, string $key): array
{
$exists = [];
$result = [];
foreach ($arr as $item) {
if (!in_array($item[$key], $exists)) {
$exists[] = $item[$key];
$result[] = $item;
}
}
return $result;
}
八、多维数组排序
function array_sort_by(array $arr, string $key, string $order = 'asc'): array
{
usort($arr, function ($a, $b) use ($key, $order) {
return $order === 'asc'
? $a[$key] <=> $b[$key]
: $b[$key] <=> $a[$key];
});
return $arr;
}
九、数组分组(group by)
function array_group_by(array $arr, string $key): array
{
$result = [];
foreach ($arr as $item) {
$result[$item[$key]][] = $item;
}
return $result;
}
使用:
$group = array_group_by($users, 'role');
十、常见业务实战示例
示例 1:接口字段精简
return array_only($user, ['id', 'name', 'avatar']);
示例 2:配置映射
$configMap = array_column($configs, 'name', 'code');
示例 3:按学院分组学生
$studentsByCollege = array_group_by($students, 'college_id');
十一、为什么要封装数组辅助函数?
| 好处 | 说明 |
|---|---|
| 代码更简洁 | 减少重复逻辑 |
| 语义更清晰 | array_only 比 foreach 更直观 |
| 统一风格 | 团队代码规范 |
| 可维护性高 | 逻辑集中管理 |
Laravel 之所以好用,很大一部分原因就是:
👉 它把这些数组工具都帮你封装好了。