array_map(function($v){
//
}, $array);
array_walk($array, function($v, $k){
//
});
array_filter($array, function($v){
//
});

以上三者 array_map、array_walk、array_filter

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

不同点:

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

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

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

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

下面是个例子

 echo "<pre>";
testArrayCallBack();
function testArrayCallBack(){
$arr = array(12,64,3,47); //array_map返回的新数组,原数组不变
$newArr = array_map(function($v){
return ++$v;
},$arr);
echo "原数组:<br/>"; print_r($arr);
echo "array_map 返回的新数组:<br/>"; print_r($newArr); //array_walk返回布尔值,原数组改变
$b = array_walk($arr, function(&$v, $k){ //如果想回调函数能直接改变数组的值,那么回调函数地址参数应为引用。
$v+=$k;
});
echo "原数组:<br/>"; print_r($arr);
echo "array_walk 返回的布尔值:"; var_dump($b ); //array_filter返回新数组,原数组不变
$newArr = array_filter($arr, function($v){
return $v > 10;
});
echo "原数组:<br/>"; print_r($arr);
echo "array_filter返回的新数组:<br/>"; print_r($newArr);
}

执行结果:

原数组:
Array
(
[0] => 12
[1] => 64
[2] => 3
[3] => 47
)
array_map 返回的新数组:
Array
(
[0] => 13
[1] => 65
[2] => 4
[3] => 48
)
原数组:
Array
(
[0] => 12
[1] => 65
[2] => 5
[3] => 50
)
array_walk 返回的布尔值:bool(true)
原数组:
Array
(
[0] => 12
[1] => 65
[2] => 5
[3] => 50
)
array_filter返回的新数组:
Array
(
[0] => 12
[1] => 65
[3] => 50
)

总结:

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. x264测试代码

    建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h& ...

  2. ubuntu su 密码 (转)

    Ubuntu刚安装后,不能在terminal中运行su命令,因为root没有默认密码,需要手动设定. 以安装ubuntu时输入的用户名登陆,该用户在admin组中,有权限给root设定密码. 给roo ...

  3. XTU 1242 Yada Number 容斥

    Yada Number Problem Description: Every positive integer can be expressed by multiplication of prime ...

  4. C#学习笔记(五)——函数

    一.定义和使用函数. 直接通过例子进行说明吧 class Program { static void Write() { Console.WriteLine("Test output fro ...

  5. 常用的 Python 爬虫技巧总结

    用python也差不多一年多了,python应用最多的场景还是web快速开发.爬虫.自动化运维:写过简单网站.写过自动发帖脚本.写过收发邮件脚本.写过简单验证码识别脚本. 爬虫在开发过程中也有很多复用 ...

  6. 如何重启Cloudera Manager?

    为什么重启: 突然发现ClouderaManager的webui访问不了了…… 我使用netstat看了一下我的webui监听端口,发现尼玛N多CLOSE_WAIT,网上查了一下是Socket关闭有问 ...

  7. 亲和数[HDU2040]

    亲和数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  8. ! cocos2d sprintf的问题

    char dong[100]; sprintf(dong,"%s","dongshen"); CCLOG(dong); 以上正确 char dong[100]; ...

  9. BZOJ3682 : Phorni

    后缀平衡树+线段树. $O(1)$比较大小的标号法真是强大. #include<cstdio> #include<cmath> #define N 300010 #define ...

  10. Robotium 测试方法

    1.检查CheckBox 是否选上,用solo.isCheckBoxChecked( “text” ). 有时候checkBox 没有相关的text,这时要用solo.isCheckBoxChecke ...