作用:
用回调函数过滤( fliter )数组中的元素,在业务中需要对数组的元素进行过滤某些值处理的时候用,省去的循环,非常实用!
语法:
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
参数:
1. 必选参数 $array , 需要被处理的数组
2. 可选参数 $callback 处理数组元素的回调函数,如果没有提供回调函数,将过滤掉所有等值为 false 的元素
3. 可选参数 决定callback接收的参数形式
ARRAY_FILTER_USE_KEY // - callback接受键名作为的唯一参数
ARRAY_FILTER_USE_BOTH // - callback同时接受键名和键值
学函数的要素 参数 + 返回值 = 作用
实例1 只传入一个参数
$testArr = [
'a',1,['a'],'',null,0,false,true
];
print_r($testArr);
$result = array_filter($testArr);
print_r($result);
Array
(
[0] => a
[1] => 1
[2] => Array
(
[0] => a
)
[3] =>
[4] =>
[5] => 0
[6] =>
[7] => 1
)
Array
(
[0] => a
[1] => 1
[2] => Array
(
[0] => a
)
[7] => 1
)
等值为 false 的全部被过滤掉,这是一个十分需要注意的地方。如果业务中需要保存 0 等值,过滤的时候需要特别注意。
过滤之后,键值对保持不变
实例2 传入 callback 第二个参数
$testArr = [
'a',1,['a'],'',null,0,false,true
];
print_r($testArr);
$result = array_filter($testArr,function($value){
if(!$value){
return true;
}
});
print_r($result);
传入回调函数,参数默认传入数组的值,在回调函数体内,进行业务逻辑,返回 true 的值被返回
Array
(
[0] => a
[1] => 1
[2] => Array
(
[0] => a
)
[3] =>
[4] =>
[5] => 0
[6] =>
[7] => 1
)
Array
(
[3] =>
[4] =>
[5] => 0
[6] =>
)
实例3 $flag 传入 数组的键
$testArr = [
'a'=>1,'b'=>2,'c'=>3
];
print_r($testArr);
$result = array_filter($testArr,function($value,$key){
if($key == 'b'){
return true;
}
},1);
print_r($result);
结果:
Array
(
[a] => 1
[b] => 2
[c] => 3
)
Array
(
[b] => 2
)
拓展,回调函数,即匿名函数需要外部的变量,用use
$testArr = [
'a'=>1,'b'=>2,'c'=>3
];
$var = 'a';
print_r($testArr);
$result = array_filter($testArr,function($value,$key)use($var){
if($key == $var){
return true;
}
},1);
print_r($result);
Array
(
[a] => 1
[b] => 2
[c] => 3
)
Array
(
[a] => 1
)
就能取到外部变量 $var 了!!