【php学习】array_map,array_walk,array_filter的区别
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的区别的更多相关文章
- array_walk、array_map、array_filter 的用法
array_walk.array_map.array_filter 和 foreach 都有循环对数组元素进行处理的功能. 一.array_walk 用法 1.循环数组,回调处理(并不修改数组元素的 ...
- 空循环比较 for foreach array_map array_walk
申请一个数组,然后不断的跑空循环,看看执行时间 for循环 foreach (不使用键) foreach(使用键) array_map array_walk 查看效率速度发现很明显 是foreach更 ...
- 009——数组(九) each list array_map array_walk array_walk_recursive
<?php /** * 9 数组 each list array_map array_walk array_walk_recursive */ //each() 返回数组中的键名和键值生成新数组 ...
- mybatis学习$与#号取值区别
1,多个参数传递用map或实体封装后再传给myBatis, mybatis学习$与#号取值区别 #{} 1.加了单引号, 2.#号写是可以防止sql注入,比较安全 select * from use ...
- php中array_walk() 和 array_map()两个函数区别
两个函数的共性和区别: 1.传入这两个函数的 $value,就是数组中的单一个元素. 2.array_walk() 仅返回true或者false,array_map() 返回处理后的数组: 3.要得到 ...
- array_map array_walk
$config = [ => [], => [], => [] ]; array_map(function($key) use ($config){ print_r($key); d ...
- 深度学习VS机器学习——到底什么区别
转自:https://baijiahao.baidu.com/s?id=1595509949786067084&wfr=spider&for=pc 最近在听深度学习的课,老师提了一个基 ...
- Maven学习----dependencies与dependencyManagement的区别(转)
转自:http://blog.csdn.net/liutengteng130/article/details/46991829 1.DepencyManagement应用场景 当我们的项目模块很多的时 ...
- UNITY3D单词学习 speed和velocity的区别
在日常用语中,这两个词没有区别,可以通用. 而在物理学里,velocity 是一个矢量(vector quantity)表示起点与终点间直线距离的长度除以所用时间所得的量,并注明方向;而 speed ...
随机推荐
- Java Applet与Java Application的区别
转自:http://www.educity.cn/java/500609.html 在Java语言中,能够独立运行的程序称为Java应用程序(Application).Java语言还有另外一种程序-- ...
- Android安卓知识点
1 包名是唯一标识apk的记号,相当于公民身份证号. 2 ADB是Android Debug Brigde 的英文缩写,意思是Android程序调试桥,使用SDK自带的工具可以对Android模拟器或 ...
- Effective C++笔记:设计与声明
条款18:让接口容易被正确使用,不易被误用 1,好的接口很容易被正确使用,不容易被误用.你应该在你的所有接口中努力达成这些性质. 2,“促进正使用”的办法包括接口的一致性,以及与内置类型的行为兼容. ...
- 关于hive的str_to_map
我之前用的是有问题的... 应该是这样用: str_to_map('a=b c=d f=e',' ','=') 这样就会拆成map,等号前面是key,后面是value
- FZU2219 StarCraft(哈夫曼树)
一个工人可以变成两个工人,这样可以画出一颗二叉树,那么就是在叶子上建的建筑. 问题的时间花费,可以看作是这颗二叉树中各个叶子的深度*k+叶子对应建筑耗费时间中的最大值. 容易想到,类似哈夫曼树一样,从 ...
- BZOJ4346 : [POI2016]Nadajniki
设$f[x][j]$表示$x$点不放无线,它的儿子里放了$j$个无线,且对$x$的父亲不作要求时的最小代价. $g[x][j]$表示$x$点不放无线,要求$x$的父亲至少放$j$个无线时的最小代价. ...
- 触碰jQuery:AJAX异步详解
触碰jQuery:AJAX异步详解 传送门:异步编程系列目录…… 示例源码:触碰jQuery:AJAX异步详解.rar AJAX 全称 Asynchronous JavaScript and XML( ...
- 在桌面chrome中调试android设备中的web页面
准备工作 1, 桌面版chrome 2, Android设备(安装有chrome浏览器) 3, Android-sdk Android-sdk安装及设置 SKD安装 从http://developer ...
- POJ 1191 棋盘分割(DP)
题目链接 大体思路看,黑书...其他就是注意搞一个in数组,这样记忆化搜索,貌似比较快. #include <cstdio> #include <cstring> #inclu ...
- BestCoder Round #74
身败名裂啊...... T1WA了半天,30min才A. T2又WA了一发,然后Hack刚2min就被别人叉了. T3做完后最后40min不知所措. 去叉别人,看到一个人写D题判m=0很奇怪,随手把他 ...