array_filter — 使用回调函数过滤数组的元素

 



array_filter(array ​​$array​​, ?​​callable​​ ​​$callback​​ = ​​null​​, int ​​$mode​​ = 0): array


遍历 ​​array​​ 数组中的每个值,并将每个值传递给 ​​callback​​ 回调函数。 如果 ​​callback​​ 回调函数返回 ​​true​​,则将 ​​array​​ 数组中的当前值返回到结果 array 数组中。

返回结果 array 数组的键名(下标)会维持不变,如果 ​​array​​ 参数是索引数组,返回的结果 array 数组键名(下标)可能会不连续。 可以使用 ​​array_values()​​ 函数对数组重新索引。

 

参数:

​array​

  • 要遍历的数组

​callback​

  • 使用的回调函数
  • 如果没有提供 callback
     回调函数,将删除数组中 array
     的所有“空”元素。 有关 PHP 如何判定“空”元素,请参阅 ​​empty()​​ 。

​mode​

决定哪些参数发送到 ​​callback​​ 回调的标志:

  • ​ARRAY_FILTER_USE_KEY​​ - 将键名作为 callback
     回调的唯一参数,而不是值
  • ​ARRAY_FILTER_USE_BOTH​​ - 将值和键都作为参数传递给 callback
     回调,而不是仅传递值

默认值为 ​​0​​ ,只传递值作为 ​​callback​​ 回调的唯一参数。

 

1、过滤数据中的空元素



<?php
$arr = array('a' => 'apple', 'b' => 'banana',"c" ,1, 0, "", "d" => null);
$arr = array_filter($arr);
var_dump($arr);
?>


 输出: 会过滤掉key或值为空的所有元素



Array
(
[a] => apple
[b] => banana
[0] => c
[1] => 1
)


 

2、使用回调函数过滤数组中的元素



<?php
function odd($var)
{
// 返回输入整数是否为奇数(单数)
return $var & 1;
}
function even($var)
{
// 返回输入整数是否为偶数
return !($var & 1);
}
$array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
$array2 = [6, 7, 8, 9, 10, 11, 12];
echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>


 输出:根据回调返回的true或者false过滤数组元素



Odd :
Array
(
[a] => 1
[c] => 3
[e] => 5
)
Even:
Array
(
[0] => 6
[2] => 8
[4] => 10
[6] => 12
)


 

3、第三个参数控制,传入回调函数的是键还是值



print_r(array_filter($array1, function ($val){

}, ARRAY_FILTER_USE_KEY));