在PHP日常开发中,处理数组时经常需要剔除其中的空值元素,比如用户提交的表单数据、接口返回的冗余数据等场景,都需要对数组进行空值过滤,保证后续数据处理的准确性。

一、使用array_filter函数基础过滤
PHP内置的array_filter函数是过滤数组空值最常用的方法,该函数会遍历数组的每个元素,将返回为false的元素剔除,默认情况下会过滤掉等同于empty判断为true的值。
默认过滤规则下,会被剔除的空值包括:空字符串""、null、false、0、0.0、空数组[]等。
<?php
// 原始数组
$originArr = [
'name' => '张三',
'age' => 0,
'email' => '',
'hobby' => null,
'score' => 90,
'is_vip' => false,
'tags' => []
];
// 使用默认规则过滤空值
$filteredArr = array_filter($originArr);
// 打印过滤后的结果
print_r($filteredArr);
// 输出结果:
// Array
// (
// [name] => 张三
// [score] => 90
// )
?>
二、自定义过滤规则过滤空值
如果默认过滤规则不符合需求,比如需要保留0或者false这类值,只过滤空字符串和null,可以给array_filter传入自定义的回调函数,实现个性化的过滤逻辑。
<?php
$originArr = [
'name' => '张三',
'age' => 0,
'email' => '',
'hobby' => null,
'score' => 90,
'is_vip' => false
];
// 自定义过滤回调:只过滤空字符串和null
$filteredArr = array_filter($originArr, function($value) {
// 排除空字符串和null,其他值都保留
return $value !== '' && $value !== null;
});
print_r($filteredArr);
// 输出结果:
// Array
// (
// [name] => 张三
// [age] => 0
// [score] => 90
// [is_vip] =>
// )
?>
三、过滤后重置数组索引
使用array_filter过滤数组后,原数组的索引会被保留,如果需要重置数组的索引为从0开始连续的整数,可以配合array_values函数使用。
<?php $originArr = [1, '', 2, null, 3, false]; // 过滤空值 $filteredArr = array_filter($originArr); print_r($filteredArr); // 输出:Array ( [0] => 1 [2] => 2 [4] => 3 ) // 重置索引 $resetArr = array_values($filteredArr); print_r($resetArr); // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 ) ?>
四、多维数组空值过滤
如果是多维数组,需要过滤每个子数组中的空值,可以使用array_map配合array_filter实现,对每个子元素都执行过滤操作。
<?php
$multiArr = [
['id' => 1, 'name' => '张三', 'desc' => ''],
['id' => 2, 'name' => '', 'desc' => '测试描述'],
['id' => 3, 'name' => '李四', 'desc' => null]
];
// 对多维数组的每个子数组过滤空值
$filteredMultiArr = array_map(function($item) {
return array_filter($item);
}, $multiArr);
print_r($filteredMultiArr);
// 输出结果:
// Array
// (
// [0] => Array
// (
// [id] => 1
// [name] => 张三
// )
// [1] => Array
// (
// [id] => 2
// [desc] => 测试描述
// )
// [2] => Array
// (
// [id] => 3
// [name] => 李四
// )
// )
?>
五、不同方法适用场景对比
| 方法 | 适用场景 | 优缺点 |
|---|---|---|
| array_filter默认过滤 | 需要过滤所有等同于empty为true的空值 | 优点:代码简洁,无需额外逻辑;缺点:无法自定义过滤规则 |
| array_filter自定义回调 | 需要保留部分默认空值,比如0、false等 | 优点:灵活度高,可定制规则;缺点:需要额外编写回调逻辑 |
| array_map+array_filter | 多维数组的空值过滤 | 优点:可批量处理子数组;缺点:嵌套层级深时需要递归处理 |
PHParray_filteremptyarray_maparray_values修改时间:2026-06-30 14:48:20