PHP array_filter 使用技巧与示例

5次阅读

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

PHP array_filter 使用技巧与示例

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''nullfalse,但这是在未提供回调函数时的默认行为;一旦传了回调,就完全按回调逻辑执行。

保留数字键并重新索引(可选)

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…

text=ZqhQzanResources