array_filter()、array_map()、array_walk()三者的用法和区别

懒散的作者
2020-11-11 / 0 评论 / 515 阅读 / 正在检测是否收录...

用法

array_filter() 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组
array_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组
array_walk() 重点在于遍历数组进行某种操作

区别

  • array_filter() 和 array_walk()对一个数组进行操作,数组参数在前,函数参数在后
  • array_map() 可以处理多个数组,因此函数参数在前,数组参数在后,可以根据实际情况放入多个数组参数

array_filter()

  该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回结果数组中。数组键名保持不变。【如果没callback 就默认过滤false,空字符串空数组等】

//没有回调函数的情况下,可以过滤false、空等数组
$arr =[1,2,false,0,'',3,4];
$new_arr = array_filter($arr);
var_dump($arr);
/*array(4) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [5]=>
  int(3)
  [6]=>
  int(4)
}*/


$arr = ['a','b',1,2,3];
    
$new_arr = array_filter($arr,function($val){
        return is_numeric($val);
});
    
var_dump($new_arr);
//返回结果
//array (size=3)
//  2 => int 1
//  3 => int 2
//  4 => int 3

array_map()

  • 该函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
  • 可以传递多个数组,回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
$arr1 = [1,2,3,4,5];
$arr2 = [6,7,8,9,10];
    
//函数写前面,数组参数写后面 (callback后面可以传入多个数组....)
$new_arr = array_map(function($val1,$val2){
    return $val1 + $val2;
},$arr1,$arr2);

var_dump($new_arr);
    //返回结果
    //array (size=5)
    //  0 => int 7
    //  1 => int 9
    //  2 => int 11
    //  3 => int 13
    //  4 => int 15

array_walk()

对数组中的每个元素应用用户自定义函数

//将数组中的元素用于某种操作
$arr = ['a','b','c'];
array_walk($arr,function($val,$key){
    echo "{$key} is {$val} <br/>";
});
//返回结果
//0 is a
//1 is b
//2 is c

//改变数组中的值,传参的时候使用引用
array_walk($arr,function(&$val,$key){
    $val .= $val;
});
var_dump($arr);
    //array (size=3)
    //  0 => string 'aa' (length=2)
    //  1 => string 'bb' (length=2)
    //  2 => string 'cc' (length=2)
0

评论 (0)

取消