1 区别
array_map 有
Array
返回值1、
array_map()
函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后新的数组,若函数作用后无返回值,则对应的新数组中为空。
2、回调函数接受的参数数目应该和传递给array_map()
函数的数组数目一致。
3、提示:您可以向函数输入一个或者多个数组。若相函数输入2个数组,其函数接受参数也应该有两个,map给函数传值时,是每次从两个数组中分别取一个传给函数。即多个数组之间是同步提交的,不是提交完一个数组再提交下一个提交几个数组,则函数也需要有几个参数
语法:
1
function array_map(?callable $callback, array $array, array ...$arrays): array {}
- 结果导向:通过回调函数对当前
数组A
的值进行处理,之后将被处理的值放到一个新的数组B
中,并返回数组B
,原数组A
不变。 - 返回值是经过回调函数处理之后生成的新数组
- 回调函数有几个形参,则
array_map
就要传几个数组给回调函数 - 回调函数基础形参只是
Array
的值,不包含键
- 结果导向:通过回调函数对当前
array_walk 有
Boolean
返回值使用用户自定义函数对数组中的每个元素做回调处理
注意:
如果 $funcname 需要直接作用于数组中的值,则给 funcname 的第一个参数指定为引用(添加&符号)。这样任何对这些单元的改变也将会改变原始数组本身。
语法:
1
function array_walk(object|array &$array, callable $callback, mixed $arg): bool {}
- 过程导向:通过回调函数对当前
数组A
的值进行处理,处理的结果可以通过引用(&)来改变数组A
,如果没有引用,则数组A
不变。 - 返回值只表示回调函数是否调用成功
- 可以自定义非
Array
额外参数给回调函数 - 回调函数基础形参是
Array
的键值对,可额外传参
- 过程导向:通过回调函数对当前
2 举例
2.1 array_map
1 | $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
1 | $b = [ |
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) “
如果想要改变原数组的值,则需要使用引用:
1 | array_walk($b, function ($k) use (&$b){ |
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要有,因为要填充数组
Reference
- https://blog.csdn.net/benpaodelulu_guajian/article/details/102566959
- https://blog.csdn.net/u013372487/article/details/51568629
写在最后
欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。