array_map,array_walk的使用以及区别

$config = [
1 => ['title'=> '推荐','code'=>1],
2 => ['title'=> '搞笑','code'=>1],
3 => ['title'=> '奇闻','code'=>2],
];
数组如上
现在要取出数组里面code为1的内容,结果要下面这样的
[1=>'推荐',2=>'搞笑']

楼主刚刚使用了一下map以及walk,发现

array_map(function($key) use ($config){
print_r($key);die();
}, $config);

array_walk($config, function($value, $key) use (&$config ){
if($value['project_code'] == 1){
$config[$key] = $value['title'];
}else{
unset($config[$key]);
}
});

使用map的时候,在匿名函数里面是没有key值的,而walk是同时存在key val两个值的,
所以这应该是他们最大的区别吧。

所以直接使用map的话,是无法实现上面的需求的,除非再定义一个回掉函数,使用回掉函数来处理,楼主没有亲测,感兴趣的可以试试。

现在来说说walk是如何实现的,其实很简单,在匿名函数里面直接使用外面的config,这里就相当于使用了一次foreach,
array_walk($config, function($value, $key) use (&$config ){
print_r($value);die();
});
得到结果如下
Array
(
    [title] => 推荐
    [code] => 1
)
然后只要判断等于1的把它拿出来就好了,不是1的就把它给删除掉
array_walk($config, function($value, $key) use (&$config ){
if($value['code'] == 1){
$config[$key] = $value['title'];
}else{
unset($config[$key]);
}
});

最后就能得到你想要的结果了,而且还不需要定义一个新数组,直接操作原来的数据一步到位
Array
(
    [1] => 推荐
    [2] => 搞笑
)

这里要特别注意的是如果你想直接就把原来的数组改变掉,一定要加 & 字符
不然的话你是操作不了外部数组的。

是不是又对&符号的使用又加深印象了 !!!!




原文地址:https://www.cnblogs.com/jenkin1991/p/9681185.html