1. array_map(function($v){
  2. //
  3. }, $array);
  4. array_walk($array, function($v, $k){
  5. //
  6. });
  7. array_filter($array, function($v){
  8. //
  9. });

以上三者 array_map、array_walk、array_filter

相同点:都是利用回调函数对数组中每个元素进行操作。

不同点:

  • 返回值
  • 回调函数的参数
  • 是否改变数组的值

array_map 返回的是新数组,原数组不变(新数组和原数组的数组长度应该一样)

array_walk 返回的布尔值,如果要改变数组元素的值,回调函数第一个参数必须是引用,如  array_walk($array, function(&$v, $k){});  , arrary_walk 的回调函数还能够接收数组的key。

array_filter 返回的是新数组,原数组不变。它的作用是过滤数组中的元素。回调函数返回真,元素才能保存到新数组中,即(新数组和原数组的数组长度可能不一样)

下面是个例子

  1. echo "<pre>";
  2. testArrayCallBack();
  3. function testArrayCallBack(){
  4. $arr = array(12,64,3,47);
  5.  
  6. //array_map返回的新数组,原数组不变
  7. $newArr = array_map(function($v){
  8. return ++$v;
  9. },$arr);
  10. echo "原数组:<br/>"; print_r($arr);
  11. echo "array_map 返回的新数组:<br/>"; print_r($newArr);
  12.  
  13. //array_walk返回布尔值,原数组改变
  14. $b = array_walk($arr, function(&$v, $k){ //如果想回调函数能直接改变数组的值,那么回调函数地址参数应为引用。
  15. $v+=$k;
  16. });
  17. echo "原数组:<br/>"; print_r($arr);
  18. echo "array_walk 返回的布尔值:"; var_dump($b );
  19.  
  20. //array_filter返回新数组,原数组不变
  21. $newArr = array_filter($arr, function($v){
  22. return $v > 10;
  23. });
  24. echo "原数组:<br/>"; print_r($arr);
  25. echo "array_filter返回的新数组:<br/>"; print_r($newArr);
  26. }

执行结果:

  1. 原数组:
  2. Array
  3. (
  4. [0] => 12
  5. [1] => 64
  6. [2] => 3
  7. [3] => 47
  8. )
  9. array_map 返回的新数组:
  10. Array
  11. (
  12. [0] => 13
  13. [1] => 65
  14. [2] => 4
  15. [3] => 48
  16. )
  17. 原数组:
  18. Array
  19. (
  20. [0] => 12
  21. [1] => 65
  22. [2] => 5
  23. [3] => 50
  24. )
  25. array_walk 返回的布尔值:bool(true)
  26. 原数组:
  27. Array
  28. (
  29. [0] => 12
  30. [1] => 65
  31. [2] => 5
  32. [3] => 50
  33. )
  34. array_filter返回的新数组:
  35. Array
  36. (
  37. [0] => 12
  38. [1] => 65
  39. [3] => 50
  40. )

总结:

array_map 对参数数组的每个元素进行操作,返回新数组,不改变原数组的值

array_walk 对参数数组的每个元素进行操作,返回布尔,改变原数组的值。

array_filter 对参数数组的元素进行过滤,返回新数组,不改变原数组的值。

【php学习】array_map,array_walk,array_filter的区别的更多相关文章

  1. array_walk、array_map、array_filter 的用法

    array_walk.array_map.array_filter  和 foreach 都有循环对数组元素进行处理的功能. 一.array_walk 用法 1.循环数组,回调处理(并不修改数组元素的 ...

  2. 空循环比较 for foreach array_map array_walk

    申请一个数组,然后不断的跑空循环,看看执行时间 for循环 foreach (不使用键) foreach(使用键) array_map array_walk 查看效率速度发现很明显 是foreach更 ...

  3. 009——数组(九) each list array_map array_walk array_walk_recursive

    <?php /** * 9 数组 each list array_map array_walk array_walk_recursive */ //each() 返回数组中的键名和键值生成新数组 ...

  4. mybatis学习$与#号取值区别

    1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号,  2.#号写是可以防止sql注入,比较安全 select * from use ...

  5. php中array_walk() 和 array_map()两个函数区别

    两个函数的共性和区别: 1.传入这两个函数的 $value,就是数组中的单一个元素. 2.array_walk() 仅返回true或者false,array_map() 返回处理后的数组: 3.要得到 ...

  6. array_map array_walk

    $config = [ => [], => [], => [] ]; array_map(function($key) use ($config){ print_r($key); d ...

  7. 深度学习VS机器学习——到底什么区别

    转自:https://baijiahao.baidu.com/s?id=1595509949786067084&wfr=spider&for=pc 最近在听深度学习的课,老师提了一个基 ...

  8. Maven学习----dependencies与dependencyManagement的区别(转)

    转自:http://blog.csdn.net/liutengteng130/article/details/46991829 1.DepencyManagement应用场景 当我们的项目模块很多的时 ...

  9. UNITY3D单词学习 speed和velocity的区别

    在日常用语中,这两个词没有区别,可以通用. 而在物理学里,velocity 是一个矢量(vector quantity)表示起点与终点间直线距离的长度除以所用时间所得的量,并注明方向;而 speed ...

随机推荐

  1. JNI,NDK

    jni的调用过程 1)安装和下载Cygwin,下载Android NDK 2)在ndk项目中JNI接口的设计 3)使用C/C++实现本地方法 4)JNI生成动态链接库.so文件 5)将动态链接库复制到 ...

  2. aac格式解析

    AAC格式有以下两种: ADIF:Audio Data Interchange Format 音频数据交换格式.这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即 ...

  3. vim跳到文件头和文末结尾

    gg           : 跳转到文件头 Shift+g   : 跳转到文件末尾

  4. 简单几何(半平面交+二分) LA 3890 Most Distant Point from the Sea

    题目传送门 题意:凸多边形的小岛在海里,问岛上的点到海最远的距离. 分析:训练指南P279,二分答案,然后整个多边形往内部收缩,如果半平面交非空,那么这些点构成半平面,存在满足的点. /******* ...

  5. 在Unity3D 4中关联Visual Studio 2012来编写C#

    Unity3D自带的MonoDevelop编辑器无论是js还是c#代码提示都很差,很诡异的就是变量名和方法名有的时候提示有的时候不提示.不过用Visual Studio代替MonoDevelop这个问 ...

  6. 删除mysql

    我以前遇到过删除mysql如果删除不干净的话,下次无法安装,也无法启动服务. 如今找到了解决方案 前言:只适用在Windows下--在控制面板中删除MySQL程序--然后在C盘中删除MySQL文件夹- ...

  7. 20145315 《Java程序设计》实验三实验报告

    实验三 敏捷开发与XP实践 实验内容 下载并学会使用git上传代码: 与同学结对,相互下载并更改对方代码,并上传: 实现代码的重载. 实验步骤 下载并用git上传代码: 1.下载并安装好git,在cm ...

  8. HDU 4417 Super Mario(划分树+二分)

    题目链接 #include <cstdio> #include <cstring> #include <algorithm> using namespace std ...

  9. 低调的华丽,Windows Server 2003 ... 写给厌倦了XP,但又纠结于vista/win7花哨的童鞋(转)

    发布于2001年10月25日的windows XP 距今已近8年 时间, 微软从没有一个操作系统能像XP那样  坚挺这么久,婚姻既有7年之痒,何况用了8年XP的广大 同学,但07年发布的vista似乎 ...

  10. MUI - 预加载

    预加载都是在mui.init({)}中执行的 方式一:preload一次仅能预加载一个页面(除非循环) var subWebview = mui.preload({ url: 'examples/ac ...