在PHP开发中,数组是非常常用的数据结构。而在操作数组时,我们经常需要对数组进行过滤,比如去除空值、保留满足某些条件的元素等等。array_filter() 函数就是专门为此而设计的一个非常实用的工具。
本文将详细讲解 array_filter() 的基本用法、参数含义以及一些常见的使用场景,帮助你快速掌握这个函数的实际应用。
array_filter() 是PHP内置函数之一,它的作用是使用回调函数对数组中的每个元素进行过滤,仅保留返回值为 true 的元素。它的语法如下:
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
$array:要过滤的原始数组。
$callback(可选):用于判断是否保留某个元素的回调函数。如果为 null,则默认移除值为 false、null、空字符串 ''、数字0、空数组 []等“假值”。
$mode(PHP 7.4+):指定传递给回调函数的内容,是值、键,还是键值对。
这是最常见的使用方式,适用于清理表单数据或配置项等:
$data = ["apple", "", null, 0, "banana", false];
$filtered = array_filter($data);
print_r($filtered);
输出结果:
Array
(
[0] => apple
[4] => banana
)
没有传入回调函数时,array_filter() 默认会移除“假值”。
比如我们只保留数组中长度大于5的字符串:
$words = ["apple", "strawberry", "banana", "kiwi"];
$filtered = array_filter($words, function($word) {
return strlen($word) > 5;
});
print_r($filtered);
输出:
Array
(
[1] => strawberry
[2] => banana
)
从PHP 7.4开始,可以通过第三个参数 $mode 控制过滤内容:
$data = [
'a' => 100,
'b' => 200,
'x' => 300,
];
$filtered = array_filter($data, function($key) {
return $key === 'x';
}, ARRAY_FILTER_USE_KEY);
print_r($filtered);
输出:
Array
(
[x] => 300
)
$_POST = [
'username' => 'alice',
'email' => '',
'age' => null,
];
$clean_data = array_filter($_POST);
这样可以快速去除空值字段,只保留有效数据。
$users = [
['name' => 'Tom', 'active' => true],
['name' => 'Jerry', 'active' => false],
['name' => 'Spike', 'active' => true],
];
$active_users = array_filter($users, function($user) {
return $user['active'];
});
print_r($active_users);
$urls = [
'https://m66.net/home',
'invalid-url',
'http://m66.net/contact',
'',
];
$valid_urls = array_filter($urls, function($url) {
return filter_var($url, FILTER_VALIDATE_URL);
});
print_r($valid_urls);
使用 array_filter() 后,原数组的键名不会被重置(如果需要重置,可以配合 array_values() 使用)。
如果需要按键名过滤,请确保PHP版本 >= 7.4 并使用 ARRAY_FILTER_USE_KEY。
回调函数应返回 true 或 false,用于判断该元素是否保留。