array_filter ()、array_map ()、array_walk () 区别?容易记混淆!!!

array_filter()、
array_map()、
array_walk()
用法和区别,有了他我们在开发中就不用去写那么多循环操作了,而且效率比循环取值更快。

具体用法

public function test(){
        $arr = ['a',0,'b','c',1,2,3,4,5,6,7];

        //过滤掉所有的数字,只要字符串  减少自己循环的必要
        $new_arr = array_filter($arr,function($v){
            if(is_string($v)){
                return $v;
            }
        });

        print_r($new_arr);
        //返回结果
        // Array ( [0] => a [2] => b [3] => c )


        $arr1 = [1,2,3,4,5];
        $arr2 = [6,7,8,9,10,55];

        //函数写前面,数组参数写后面   2个数组的计算,也不需要自己循环计算
        $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
        //  5 => int 55

        //将数组中的元素用于某种操作
        $arr = ['a','b','c','d','e','f',8];

        array_walk($arr,function($val,$key){
            echo "{$key} is {$val} <br/>";
        });
        //返回结果
        // 0 is a 
        // 1 is b 
        // 2 is c 
        // 3 is d 
        // 4 is e 
        // 5 is f 
        // 6 is 8 

        //改变数组中的值,传参的时候使用引用   同意加个连接符3
        array_walk($arr,function(&$val,$key){
            $val = $val . 3;
        });

        var_dump($arr);
      // array (size=7)
      // 0 => string 'a3' (length=2)
      // 1 => string 'b3' (length=2)
      // 2 => string 'c3' (length=2)
      // 3 => string 'd3' (length=2)
      // 4 => string 'e3' (length=2)
      // 5 => string 'f3' (length=2)
      // 6 => string '83' (length=2)
    }

从以上的代码中,看出什么问题来了吗?少去开发中的很多循环,从而达到想要的效果。

本作品采用《CC 协议》,转载必须注明作者和本文链接
让编程成为一种习惯!
本帖由系统于 2周前 自动加精
讨论数量: 5

果然效率高很多,立刻关注

7个月前 评论

还有一个array_reduce

7个月前 评论
Laravel技术社区 (楼主) 7个月前
Laravel技术社区 (楼主) 7个月前

第一个写法应该这样把

$arr = ['a',0,'b','c',1,2,3,4,5,6,7];

        //过滤掉所有的数字,只要字符串  减少自己循环的必要
        $new_arr = array_filter($arr,function($v){
            if(is_string($v)){
                return true;
            }
        });

        print_r($new_arr);
3个月前 评论

但是底层估计还是循环只是看代码更简洁了吧

3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!