在PHP开发中,数组是常用的数据结构,经常会遇到需要清洗数组数据的情况,比如去除空值、去除重复元素,PHP提供了多个内置函数可以直接实现这些需求,不同函数的处理逻辑和适用场景存在差异。

常用数组去空值内置函数
1. array_filter函数
array_filter是PHP中最常用的数组过滤函数,默认会过滤掉数组中所有等价于false的元素,包括空字符串、null、0、false、空数组等,同时会保留原数组的键名。
基础用法示例如下:
<?php
$arr = [1, 0, '', null, false, 'hello', [], 2];
// 默认过滤空值
$result1 = array_filter($arr);
print_r($result1);
// 自定义过滤规则,只保留字符串类型且非空的元素
$result2 = array_filter($arr, function($val) {
return is_string($val) && $val !== '';
});
print_r($result2);
2. array_diff函数
array_diff用于计算数组的差集,通过传入需要排除的空值集合,也可以实现去空值的效果,这种方式可以精确控制需要过滤的空值类型,不会误过滤0、false等合法值。
使用示例:
<?php $arr = [1, 0, '', null, false, 'hello', 2]; // 过滤空字符串、null、空数组 $result = array_diff($arr, ['', null, []]); print_r($result);
数组去重相关内置函数
array_unique函数
array_unique用于去除数组中的重复值,会保留第一个出现的元素,后续重复的元素会被移除,同样会保留原键名。
使用示例:
<?php $arr = [1, 2, 2, 3, '3', 4]; $result = array_unique($arr); print_r($result);
函数功能对比
以下是几个常用函数的核心差异对比:
| 函数名 | 核心功能 | 键名处理 | 可定制性 |
|---|---|---|---|
| array_filter | 过滤数组元素,默认去空值 | 保留原键名 | 支持自定义回调规则 |
| array_diff | 计算数组差集,可指定过滤值 | 保留原键名 | 可精确指定过滤的空值类型 |
| array_unique | 去除数组重复值 | 保留原键名 | 仅支持值去重,无自定义规则 |
实用使用技巧
- 如果需要去除数组空值后重置键名,可以结合
array_values函数使用,示例如下:
<?php $arr = [1, 0, '', null, false, 'hello', 2]; $result = array_values(array_filter($arr)); print_r($result);
- 如果数组中包含0、false等合法值,不要使用默认的
array_filter,建议用array_diff指定需要过滤的空值类型,避免误删数据。 - 处理多维数组去空值时,
array_filter的回调函数可以递归处理子数组,实现深层空值过滤。
注意事项
使用array_filter默认规则时,0、false、null都会被过滤,如果业务中这些值属于合法数据,一定要自定义过滤回调或者改用array_diff。
如果需要对数组同时去重和去空值,可以先使用array_filter去空值,再使用array_unique去重,最后按需重置键名即可。
PHP数组array_filterarray_diffarray_values修改时间:2026-07-13 08:54:21