array_map,array_walk,array_filter等内置函数巧用代替foreach

Crasph彬 308 1

前言

之前学习swift时感受到filter,map等函数的牛逼,但是一直没有使用php的这些函数,最近最项目突然想起来,在项目中就用了起来,确实简洁了点,所以就顺便写了出来,一来与大家分享,二来,加深下印象嘛。好了,废话不多说,开始进入正题……

array_map

个人认为,函数最重要的有两点,一是参数,二是返回值。

首先,先看array_map的定义:

array array_map( callable $callback   , array $array1   [, array $...  ] )

callback
回调函数,应用到每个数组里的每个元素。
array1
数组,遍历运行 callback 函数。

由定义可以看出,array_map有多个参数,第一个为一个回调函数,其余为参数,并且参数都是交由callback这个回调函数进行逐条处理的,并且,返回值为一个新的数组。

$a = 'a';
$array = [
     'a' => 1,
     'b' => 2,
     'c' => 3
];
$new = array_map(function($value) use($a){
    echo $value.$a.'</br>';
    return $value.$a;
},$array);
var_dump($new);

以上的输出结果为:

1a
2a
3a
--------------------------------
array(3) {
  ["a"] => string(2) "1a"
  ["b"] => string(2) "2a"
  ["c"] => string(2) "3a"
}

由此可以看出,array_map会逐条使用callback函数进行处理,并且返回值为处理后形成的新数组并且并不改变原来数组的结构。

小提示

use可以引入外部的变量$a,这是php的特性。另外,array_map的回调函数只能得到value的值,无法取到参数的键。

array_walk

array_walk的用法与array_map大同小异,首先我们先看下定义:

bool array_walk( array &$array , callable $callback   [, mixed $userdata = NULL  ] )

由定义可以看出,array_walk的返回值是bool类型,并且会改变原来数组的结构(注意参数中&)。

同样,代码如下:

$a = 'a';
$array = [
     'a' => 1,
     'b' => 2,
     'c' => 3
];
$new = array_walk($array,function(&$value) use($a){
    $value =  $value.$a;
});
var_dump($array);
echo "----------".'</br>';
var_dump($new);

输出结果为:

array(3) {
  ["a"] => string(2) "1a"
  ["b"] => string(2) "2a"
  ["c"] => string(2) "3a"
}
----------
bool(true)

可以看出,成功之后返回值为true,并且,改变了原来数组$array的值。值得注意的是,array_walk中的回调函数中的参数可以有三个,如下:

$a = 'a';
$array = [
     'a' => 1,
     'b' => 2,
     'c' => 3
];
$new = array_walk($array,function(&$value , &$key , $item) use($a){
    echo $item.':'.$key.'=>'.$value.'</br>';
    $value =  $value.$a;
    $key = $key.$a;
},'item');
var_dump($array);
echo "----------".'</br>';
var_dump($new);

输出结果如下:

item:a=>1
item:b=>2
item:c=>3
array(3) {
  ["a"] => string(2) "1a"
  ["b"] => string(2) "2a"
  ["c"] => string(2) "3a"
}
----------
bool(true)

由此可以见,array_walk并不能改变原数组的键key的值。

支付宝打赏
微信打赏
发表评论
表情 图片 链接 代码

  1. Crasph彬
    Crasph彬 站长

    之前学习swift时感受到filter,map等函数的牛逼,但是一直没有使用php的这些函数,最近最项目突然想起来,在项目中就用了起来,确实简洁了点,所以就顺便写了出来,一来与大家分享,二来,加深下印象嘛#(吐舌)

分享
微信
微博
QQ