array_filter()

1. 定义

该函数将数组中的每个值发送到指定的回调函数处理,如果回调函数返回TRUE,则该元素被添加至返回的数组,键名不变。 返回被回调函数处理过值的数组。

注:

  • 由于该函数会逐个处理数组元素,故不应在回调函数中删除或增加数组元素,否则将导致不可预测的结果
  • 回调函数一般仅做判断过滤处理

2. 语法

array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array

3. 参数说明

参数 可选性 数据类型 描述
$array 必需 数组 待经回调函数处理的数组
$callback 可选 回调类型 处理数组元素值的回调函数
$flag 可选 整型或常量 决定回调函数接收参数的形式

其中,如果未传入$callback变量,那么该函数将删除所有元素值等同于FALSE的元素。

另外,$flags参数有以下几个可选值:

  • ARRAY_FILTER_USE_KEY:默认值,回调函数仅接受键名作为唯一的参数
  • ARRAY_FILTER_USE_BOTH:回调函数接受键名和键值两个参数

4. 示例

<?php

// array_filter()
// 将数组中的每个值发送到指定的回调函数处理,如果回调函数返回TRUE,则该元素被添加至返回的数组,键名不变

$arr = [
    'Name'=>'极速教程',
    'none'=>'',// 空字符串
    'bool'=>false,
    'number'=>9
];
$res = array_filter($arr);// 等同于 FALSE 的键值将被忽略
var_dump($res);
/* 输出:
array(2) {
  ["Name"]=>
  string(12) "极速教程"
  ["number"]=>
  int(9)
}
*/

// 该回调函数过滤值为字符串类型的元素,返回 true 的元素都将保留
function callback($value, $key) {
    if(gettype($value) == 'string') {
        return true;
    } else {
        return false;
    }
}

$res = array_filter($arr, 'callback', ARRAY_FILTER_USE_BOTH);
var_dump($res);
/* 输出:
array(2) {
  ["Name"]=>
  string(12) "极速教程"
  ["none"]=>
  string(0) ""
}
*/

5. 延展阅读

  • array_map():对数组中的每个元素都调用指定函数
  • array_reduce():迭代地处理数组中的每个元素,将数组迭代成一个单一的值
  • array_walk():将使用用户自定义的回调函数处理指定数组的每一个元素