array_map、array_walk、array_reduce

  不同情境下替换foreach,且效果更佳
  array_map(),仅遍历值,返回操作后新数组,支持多个数组。
  array_reduce(),仅遍历值,返回累积操作后最后一个return的值。
  array_walk(),遍历键值对,返回Bool值,可以通过use(&param)传递额外的参数或直接修改原数组。
 
  array_map
  对原数组的值进行遍历,array_map()参数中有几个数组,自定义函数就接收几个参数,
  返回值:自定义函数return的值组成的新数组
 
public function test($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" }
//只对数组的值进行操作并返回一个新数组时,可以把array_map当成foreach的普通遍历使用。

//array_map()参数里有几个数组,自定义函数就必须有几个参数来承接值。
function myfunction($v1,$v2)
{
    if ($v1===$v2)
    {
       return "same";
    }
    return "different";
}
 
$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("myfunction",$a1,$a2));
  
array_reduce
  仅遍历数据的值,将结果作为v1和下一个值作为v2通过自定义方法计算后返回。用于叠加值、或拼接等情况,最终返回的是最后一次自定义函数的return值
function myfunction($v1,$v2)
{
    return $v1 . "-" . $v2;
}
$a=array("Dog","Cat","Horse");
$res = array_reduce($a,"myfunction",5)//第三个参数可选:规定发送到函数处理的第一个值
print_r($res);    //5-Dog-Cat-Horse

 

array_walk
  【array_walk_recursive 更深的数组】
  对数组中的每个元素应用用户自定义函数【数组的键名和键值是参数】。
  实际遍历每个键值对key和val,最终返回一个bool值。
  array_walk()更像是普通遍历,,我习惯用它来替换foreach,可以用use(&sum)传递额外的参数,如何使用见代码
 //把数组内值等于99的设置为-
function test()
{
    $val = [11,22,99,99,33,44];
    $sum = 0;
    array_walk($val, function ($v,$k) use(&$val,&$sum){
        if($v == 99)
        {
            $val[$k] = '-';
        }
        $sum += $v;
    });
    var_dump($val);//结果array(11, 22, "-", "-", 33, 44);
    var_dump($sum);exit;
    //int(308)
}

 

 
posted @ 2019-04-19 09:47  _Eternity味道  Views(357)  Comments(0Edit  收藏  举报