• Linux
  • apache
  • centos
  • Git版本管理
  • Linux基本命令
  • linux配置与优化
  • Nginx
  • PHP
  • Redis
  • Supervisor
  • Swoole
  • windows
  • THINKPHP
  • 开发者手册
  • Chat GPT / Open Ai
  • array_map与array_walk的用法与区别详解

    全屏阅读
  • 基本信息
  • 作者:
  • 作者已发布:925篇文章
  • 发布时间:2022年06月24日 22:51:27
  • 所属分类:PHP+MySql, PHP原生源码
  • 阅读次数:755次阅读
  • 标签:
  • 一、背景

          今天看代码的时候,发现代码中使用array_map来统一去掉数组中的空格,比起循环来,方便了很多。网上百度一下array_map,然后发现了array_walk。好吧,这两个函数虽然在某些情境下有异曲同工之妙,但是区别还是很大的。

    二、关于array_map

    1、文档

          array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。

    回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

    http://www.w3school.com.cn/php/func_array_map.asp

    大家看一下文档,就知道大概的用法了。

    //这里可以传递多个数组作为参数,与之对应的,myfunction()函数中也要有多个参数。是一一对应的关系
    array_map(myfunction,array1,array2,array3...)

    2、例子

      public function test_array_map(Request $request)
        {
          $aa = array('aa', 'bb');
          $bb = array_map(function($item) {
            $item = $item . 'aa' ;
            return $item;
          }, $aa);
          var_dump($aa);
          echo'<br/>';
          var_dump($bb);
        }
    //结果
          array(2) { [0]=> string(2) "aa" [1]=> string(2) "bb" }
         array(2) { [0]=> string(4) "aaaa" [1]=> string(4) "bbaa" }

    此处可以看到,$bb是我们新返回的数组,也是经过我们自己处理过的数组。此时是不会影响到原数组的。

    三、array_walk

    1、文档

          array_walk() 函数对数组中的每个元素应用用户自定义函数。在函数中,数组的键名和键值是参数。

    http://www.w3school.com.cn/php/func_array_walk.asp

    用法:array_walk(array,myfunction,userdata…)

    这里的例子看文档就可以,比较清楚。需要注意的是该函数的返回值是bool值

    2、例子:

      public function test_array_walk(Request $request)
      {
        $aa = array('aa', 'bb');
        $bb = array_walk($aa,function($item) {
          $item = $item . 'aa' ;
          return $item;
        });
        var_dump($aa);
        echo'<br/>';
        var_dump($bb);
        }
        //结果
        array(2) { [0]=> string(2) "aa" [1]=> string(2) "bb" }
    	 bool(true)

    这里发现返回的值是bool值。如果想要输出的话,就在函数中使用echo $item。这里打印原数组的值是不变的,如果要改变原数组的值,则需要使用引用符号:

    //这里加了个引用
         $bb = array_walk($aa,function(&$item) {
              $item = $item . 'aa' ;
              return $item;
            });
            //其他不变打印结果(原数组已经被改变)
            array(2) { [0]=> string(4) "aaaa" [1]=> string(4) "bbaa" }
     bool(true)

    四、区别

    1、array_map的用法是array_map(函数名,数组),而array_walk的用法是array_walk(数组,函数名);
    
    2、array_map里面的函数可以是自定义函数,也可以是php自带的函数,比如trim去除空格等。而array_walk里面的函数只能是自定义的函数
    
    3、array_map不可以改变原函数的值,会获取到新的数组。array_walk是可以改变原函数的值的(加个引用)。
    
    4、array_map必须要有返回值,因为要填充数组。而array_walk可以没有返回值,输出的话要在调用的函数中通过echo来输出。

    这两个函数有个共同点就是可以简化我们的代码,有些简单的foreach循环替换功能,完全可以用这两个函数来实现。记录一下。

    end

    顶一下
    (0)
    100%
    订阅 回复
    踩一下
    (0)
    100%
    » 郑重声明:本文由mpxq168发布,所有内容仅代表个人观点。版权归恒富网mpxq168共有,欢迎转载, 但未经作者同意必须保留此段声明,并给出文章连接,否则保留追究法律责任的权利! 如果本文侵犯了您的权益,请留言。
  • 【上一篇】
  • 【下一篇】
  • 目前有 0 条留言 其中:访客:0 条, 博主:0 条

    给我留言

    您必须 [ 登录 ] 才能发表留言!