array_filter 是 php 中不修改原数组、返回满足条件元素新数组的筛选函数,保留原始键名,支持回调函数、键名或键值对筛选,并需注意空值处理与索引重排。

array_filter 是 PHP 中用于筛选数组元素的常用函数,它不修改原数组,而是返回一个新数组,只包含满足指定条件的元素。掌握它的行为细节(比如键名保留、回调函数写法、空值处理)能避免常见坑。
基础用法:用回调函数筛选
最常见用法是传入一个回调函数,对每个元素执行判断,返回 true 的元素被保留:
$numbers = [1, 2, 0, -3, '', null, 5];
$result = array_filter($numbers, function($n) {
return is_int($n) && $n > 0;
});
// 结果:[1 => 2, 6 => 5] —— 键名保留,不是重排索引
注意:默认会过滤掉 空值(false-y),如 0、''、null、false,但这是在未提供回调函数时的默认行为;一旦传了回调,就完全按回调逻辑执行。
AiFreePhp(爱免费php企业建站程序是一个免费开源的PHP建站程序),基于PHP + MYSQL 与模板技术,具有产品展示,文章栏目,下载管理,友情链接等功能。无任何限制功能,程序简单实用,可用于中小企业网站建设,不收取任何费用。使用本程序,不可将程序变相转售,二次开发发布。 运行安装目/install/index.php一般要求安装在站点的根目录,不是根目录有试过有没有问题,请大家尽量以
保留数字键并重新索引(可选)
array_filter 保留原始键名,若你需要连续数字索引(如 JSON 输出或 for 循环),需手动重置:
立即学习“PHP免费学习笔记(深入)”;
- 用
array_values()获取纯值数组并重排键:array_values(array_filter($arr, $callback)) - 若只要值不要键,且后续不依赖键,这步很实用
使用 ARRAY_FILTER_USE_KEY 或 ARRAY_FILTER_USE_BOTH
从 PHP 5.6 起,可传第三个参数控制回调接收什么参数:
-
ARRAY_FILTER_USE_KEY:回调接收键名,适合按键筛选(如只留以user_开头的键) -
ARRAY_FILTER_USE_BOTH:回调同时接收值和键,更灵活(例如:只保留值为字符串且键含name的项)
$data = ['user_id' => 123, 'user_name' => 'Alice', 'email' => 'a@b.c'];
$result = array_filter($data, function($key) {
return strpos($key, 'user_') === 0;
}, ARRAY_FILTER_USE_KEY);
// 结果:['user_id' => 123, 'user_name' => 'Alice']
避免常见错误
- 忘记回调返回布尔值:返回非布尔值(如字符串、数字)会被隐式转为 bool,容易误判
- 混淆默认过滤行为:不传回调时,
array_filter($arr)等价于array_filter($arr, 'boolval'),会删掉所有 false-y 值 - 对关联数组用
foreach遍历时仍用原键,别假设键是 0,1,2…










