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 之所以好用,很大一部分原因就是:

👉 它把这些数组工具都帮你封装好了。