本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1 区别
-
array_map 有
Array
返回值1、
array_map()
函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后新的数组,若函数作用后无返回值,则对应的新数组中为空。 2、回调函数接受的参数数目应该和传递给array_map()
函数的数组数目一致。 3、提示:您可以向函数输入一个或者多个数组。若相函数输入2个数组,其函数接受参数也应该有两个,map给函数传值时,是每次从两个数组中分别取一个传给函数。即多个数组之间是同步提交的,不是提交完一个数组再提交下一个提交几个数组,则函数也需要有几个参数
语法:
function array_map(?callable $callback, array $array, array ...$arrays): array {}
- 结果导向:通过回调函数对当前
数组A
的值进行处理,之后将被处理的值放到一个新的数组B
中,并返回数组B
,原数组A
不变。 - 返回值是经过回调函数处理之后生成的新数组
- 回调函数有几个形参,则
array_map
就要传几个数组给回调函数 - 回调函数基础形参只是
Array
的值,不包含键
- 结果导向:通过回调函数对当前
-
array_walk 有
Boolean
返回值使用用户自定义函数对数组中的每个元素做回调处理
注意:
如果 $funcname 需要直接作用于数组中的值,则给 funcname 的第一个参数指定为引用(添加&符号)。这样任何对这些单元的改变也将会改变原始数组本身。
语法:
function array_walk(object|array &$array, callable $callback, mixed $arg): bool {}
- 过程导向:通过回调函数对当前
数组A
的值进行处理,处理的结果可以通过引用(&)来改变数组A
,如果没有引用,则数组A
不变。 - 返回值只表示回调函数是否调用成功
- 可以自定义非
Array
额外参数给回调函数 - 回调函数基础形参是
Array
的键值对,可额外传参
- 过程导向:通过回调函数对当前
2 举例
2.1 array_map
$b = [
['name' => 'zz', 'age' => 12],
['name' => 'ls', 'age' => 13],
['name' => 'hh', 'age' => 8]
];
$c = array_map(function ($k) {
return $k['name'] . '----' . ['age'];
}, $b);
var_dump(json_encode($c));
var_dump(json_encode($b));
string(43) "["zz----Array","ls----Array","hh----Array"]" string(4) " " string(69) "[{"name":"zz","age":12},{"name":"ls","age":13},{"name":"hh","age":8}]"
2.2 array_walk
$b = [
['name' => 'zz', 'age' => 12],
['name' => 'ls', 'age' => 13],
['name' => 'hh', 'age' => 8]
];
array_walk($b, function ($k){
var_dump($k);
var_dump("<br>");
});
array(2) { ["name"]=> string(2) "zz" ["age"]=> int(12) } string(4) " " array(2) { ["name"]=> string(2) "ls" ["age"]=> int(13) } string(4) " " array(2) { ["name"]=> string(2) "hh" ["age"]=> int(8) } string(4) "
如果想要改变原数组的值,则需要使用引用:
array_walk($b, function ($k) use (&$b){
$b[$k['name']] = $k['age'];
});
var_dump(json_encode($b));
var_dump("<br>");
string(112) "{"0":{"name":"zz","age":12},"1":{"name":"ls","age":13},"2":{"name":"hh","age":8},"zz":12,"ls":13,"hh":8,"":null}" string(4) "
3 关键点
- array_map 主要是为了得到你的回调函数处理后的新数组,要的是结果。
- array_walk 主要是对每个参数都使用一次你的回调函数,要的是处理的过程。
- array_walk 可以认为提供额外参数给回调函数,map不可以
- array_walk 主要是要对数组内的每个值进行操作,操作结果影响原来的数组
- array_map 主要是对数组中的值进行操作后返回数组,以得到一个新数组
- array_walk 可以没有返回值 map要有,因为要填充数组