php array_walk(),PHP中array_map()、array_walk()的使用总结

一句话描述

array_map() 把数组每个元素都执行一下回调函数,回调函数的返回值作为数组对应key的新值

array_walk() 将数组每个元素都调用一下回调函数,回调函数返回值仅控制是否继续执行

参数描述

array array_map ( callable callback , arrayarray1 [, array $… ] )

【解析】 array_map 传入无限个参数,第一个参数是回调函数,第二个及以后的参数是作用的目标数组

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

【解析】 array_walk 传入三个参数,第一个参数是作用的目标数组,第二个参数是回调函数,第三个参数比较少用,可以传入用户自定义的数据

用途

array_map() 可以用于遍历数组元素,并生成一个新的数组;array_walk() 会将回调函数直接作用于每个数组元素上;

但是两者在使用上是有一定的区别存在的,然后借用 linus 一句名言:talk is cheap, show me your code!,请上代码!

背景

假设我们有一组学生数据如下,接下来的演示操作将基于此数据

需求1:将所有学生的分数 * 10

使用特性: 遍历单个数组

解法1:经典 foreach

【解析】 $value 使用引用的方式传递,可以直接修改数组的值

解法2:array_map 迭代

【解析】 如果第二个参数往后只有一个数组,则会遍历此数组,并将数组的值作为回调函数的第一个参数传递进去(注意:只有值会被传递进去),然后保持原数组的key不变,回调函数对应的返回值为新的value组成新数组并返回。

解法2:array_walk 迭代

【解析】 第一个参数传入目标数组,第二个参数传入一个回调函数,第三个参数传入一个用户自定义的值,比如这里需要 * 10,我们就可以把这个数字作为第三个参数传递进去。

迭代时,会将数组的 value key 作为回调函数的 第一个参数和第二个参数,userdata 作为第三个参数传入(注意:如果需要改变数组的数据,第一个参数请使用引用传递)

结果均为:

需求2:将头衔 $prefx 拼接在 name 属性前

使用特性: 第三方数据传入

解法1:经典 foreach

【解析】 $value 使用引用的方式传递,可以直接修改数组的值

解法2:array_map 匿名函数使用 use 传入三方参数,并使用 array_map 多数组参数的特性

【解析】 array_map 可以接受多个数组,并将多个数组的值依次作为回调函数的 第一个、第二个……参数传入,由于传入单数组不会回调数组的key,所以需要使用 array_keys($students) 提取数组的键作为回调的第二个参数。

解法3: array_walk 第三个参数传入第三方参数

【解析】 与 foreach 的写法类似,不过变成了函数迭代的形式

结果均为:

需求3:将头衔 prefix 和score 还有 $students 中的 name 组成新的数组

使用特性: array_map 的多数组参数

使用场景: 一般用于组合多个相同长度数组的元素,并形成有关联关系的数组

解法:使用 array_map 的多数组参数可以很方便的组合多个数组

输出结果:

【注】foreach 或者 array_walk 均可以实现这个效果,可以自行探索下

回调函数传入普通方法或者对象的方法

callback 参数除了可以传入 「匿名函数」 之外,还可以传入 普通方法、实例化的对象方法、类的静态方法等

回调普通方法

回调对象的某个方法

回调类的静态方法

输出结果

速度和选择

参考网上的各种测试,三种方法里边,foreach 的速度最快,其次是 array_map,最后是 array_walk,但是 array_walk 写起来会灵活一些,特别是第三个参数 userdata,可以很方便的传入第三方数据,而不用想办法通过 全局变量、 function use 等方式传入三方参数。

因为 array_map 和 array_walk 均支持传入函数处理,所以在代码复用性上会有一定的优势。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是对于在PHP的一些数组函数的作用和简单用法举例: 1. array_merge(): 将一个或多个数组合并为一个数组。 ```php $array1 = array('red', 'green'); $array2 = array('blue', 'yellow'); $result = array_merge($array1, $array2); print_r($result); // 输出:Array ( [0] => red [1] => green [2] => blue [3] => yellow ) ``` 2. array_flip(): 交换数组的键和值。 ```php $array = array('a' => 1, 'b' => 2, 'c' => 3); $result = array_flip($array); print_r($result); // 输出:Array ( [1] => a [2] => b [3] => c ) ``` 3. array_combine(): 创建一个新数组,使用一个数组的值作为键名,另一个数组的值作为键值。 ```php $keys = array('a', 'b', 'c'); $values = array(1, 2, 3); $result = array_combine($keys, $values); print_r($result); // 输出:Array ( [a] => 1 [b] => 2 [c] => 3 ) ``` 4. array_chunk(): 将一个数组分割成多个数组,每个数组包含指定数量的元素。 ```php $array = array('a', 'b', 'c', 'd', 'e'); $result = array_chunk($array, 2); print_r($result); // 输出:Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) ) ``` 5. array_fill(): 用给定的值填充数组。 ```php $result = array_fill(0, 3, 'apple'); print_r($result); // 输出:Array ( [0] => apple [1] => apple [2] => apple ) ``` 6. array_replace(): 使用后面数组的值替换第一个数组的值。 ```php $array1 = array('a' => 1, 'b' => 2); $array2 = array('b' => 3, 'c' => 4); $result = array_replace($array1, $array2); print_r($result); // 输出:Array ( [a] => 1 [b] => 3 [c] => 4 ) ``` 7. array_map(): 将回调函数作用到给定数组的每个元素上,并返回一个新的数组。 ```php $array = array(1, 2, 3); $result = array_map(function($value) { return $value * 2; }, $array); print_r($result); // 输出:Array ( [0] => 2 [1] => 4 [2] => 6 ) ``` 8. array_walk(): 对数组的每个元素应用用户自定义的函数。 ```php $array = array('a' => 1, 'b' => 2, 'c' => 3); array_walk($array, function(&$value, $key) { $value = $value * 2; }); print_r($array); // 输出:Array ( [a] => 2 [b] => 4 [c] => 6 ) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值