当前位置: 首页> 最新文章列表> 如何使用 array_filter() 过滤数组中的空值

如何使用 array_filter() 过滤数组中的空值

M66 2025-06-05

在 PHP 开发中,数组操作是日常工作中最常见的一环。而“清洗数组”这件事,我们几乎天天都在做。无论是处理用户提交的表单数据,还是清理接口返回的数据,其中最常见的需求之一就是。

幸运的是,PHP 提供了一个非常优雅的方法:array_filter()。本文将带你深入了解这个函数的用法,并分享一些实用技巧,帮你高效、灵活地过滤数组中的空元素。

基本用法:一行代码,干净利落

PHP 的 array_filter() 默认行为就是移除数组中值为“false”的元素,包括:

  • 空字符串 ''

  • 数字 0 和字符串 '0'

  • null

  • false

  • 空数组 []

来看一个最简单的例子:

$data = ['apple', '', null, 'banana', 0, '0', false];

$filtered = array_filter($data);

print_r($filtered);

输出结果为:

Array
(
    [0] => apple
    [3] => banana
)

你会发现,array_filter() 默认就把那些“看上去没内容”的值都去掉了。这种用法对于大多数场景已经足够好。

自定义过滤逻辑:更精准地筛选

如果你不希望 '0'0 被过滤掉,那就可以自定义一个回调函数,让 array_filter() 只过滤掉你真正认为是“空”的值,比如 null''

$data = ['title' => '', 'price' => 0, 'available' => false, 'sku' => '0', 'description' => null];

$filtered = array_filter($data, function($value) {
    return !is_null($value) && $value !== '';
});

print_r($filtered);

输出:

Array
(
    [price] => 0
    [available] => 
    [sku] => 0
)

这种方式特别适合处理用户表单数据或配置项,不会误删有意义的“零值”。

应用案例:清理表单数据再提交

假设你要将用户输入的数据通过 POST 请求发送给某个 API,我们不希望把空值传过去:

$formData = [
    'name' => '张三',
    'email' => '',
    'phone' => null,
    'age' => 25
];

$cleanData = array_filter($formData, function($val) {
    return !is_null($val) && $val !== '';
});

$apiUrl = 'https://api.m66.net/user/submit';

$options = [
    'http' => [
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($cleanData),
    ]
];

$context  = stream_context_create($options);
$result = file_get_contents($apiUrl, false, $context);

echo $result;

通过这种方式,我们只发送有效数据,避免让 API 收到一堆没用的字段。

小技巧:递归过滤多维数组

如果你的数组是多维的,比如从前端提交的嵌套表单,那就需要用递归的方式去清理:

function recursive_filter(array $input) {
    foreach ($input as $key => &$value) {
        if (is_array($value)) {
            $value = recursive_filter($value);
        }
    }
    return array_filter($input, function($val) {
        return $val !== '' && !is_null($val);
    });
}

$data = [
    'user' => [
        'name' => '李四',
        'email' => '',
        'tags' => ['', null, 'developer']
    ],
    'status' => null
];

$cleaned = recursive_filter($data);

print_r($cleaned);

这样处理后,你的数组干干净净,既不会漏删空值,也不会错删有效内容。

总结:array_filter() 是你处理数据的好帮手

通过上面的案例,我们可以看到:

  • array_filter() 默认行为已经很强大,快速去掉各种“假值”。

  • 搭配自定义回调,你可以精确控制要过滤的内容。

  • 处理复杂结构时,用递归方式也能轻松应对。

  • 实际开发中,它可以用于清理表单数据、接口请求参数、甚至数据库写入前的数据过滤。

总之,这个函数用得越熟练,你的数据就越干净,代码也会更优雅!