在PHP中,数组函数 array_filter () 用回调函数过滤数组中的元素。
函数语法:
array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array
函数参数说明:
参数 | 描述 |
---|---|
array | 必需。规定要过滤的数组。 |
callback | 可选。规定要用的回调函数。如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的元素。 |
flag | 可选。决定 callback 接收的参数形式:
|
array_filter() 函数使用回调函数过滤数组中的元素。该函数依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前元素会被包含在返回的结果数组中,数组的键名保留不变。如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的元素。
举例1,过滤数组(不指定callback和flag):
<?php // 定义数组 $arr = ['a' => 0, 'b' => 1, 'c' => 2, 'd' => 3]; // 如果没有提供 callback 函数, 将删除 array 中所有等值为 FALSE 的条目。 $res = array_filter($arr); var_dump($res);
以上代码输出如下:
array (size=3) 'b' => int 1 'c' => int 2 'd' => int 3
举例2,过滤数组(指定callback且callback 接受键名作为的唯一参数):
<?php // 定义数组 $arr = ['a' => 0, 'b' => 1, 'c' => 2, 'd' => 3]; function filterkey($k) { return $k != 'b'; } // 指定callback且callback 接受键名作为的唯一参数 $res = array_filter($arr, 'filterkey', ARRAY_FILTER_USE_KEY); var_dump($res);
以上代码输出如下(过滤key为b的数组元素):
array (size=3) 'a' => int 0 'c' => int 2 'd' => int 3
举例3,过滤数组(指定callback且callback 接受接受键名和键值):
<?php // 定义数组 $arr = array('a' => 0, 'b' => 1, 'c' => 2, 'd' => 3); // 注意回调函数的参数为值,键 function filterboth($v, $k) { return $v > 1; } // 指定callback且callback 接受受键名和键值 $res = array_filter($arr, 'filterboth', ARRAY_FILTER_USE_BOTH); var_dump($res);
以上代码输出如下(过滤value大于1的数组元素):
array (size=2) 'c' => int 2 'd' => int 3
注意:
当回调函数接受键/值作为参数时,第一个参数为值,第二个参数为key