php数组(十二) array_filter

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

 

array_filter(array $array?callable $callback = nullint $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));

 

 

posted on 2021-08-06 16:55  1450811640  阅读(58)  评论(0编辑  收藏  举报