array_map与array_walk的用法与区别详解

一、背景

      今天看代码的时候,发现代码中使用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

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值