【转】php 之 array_filter、array_walk、array_map的区别
【转】php 之 array_filter、array_walk、array_map的区别
原文:https://blog.csdn.net/csdnzhangyiwei/article/details/60761512。
array array_filter ( array $input [, callback $callback ] )
array array_map ( callback $callback , array $arr1 [, array $... ] )
bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )
详细说明:
array_filter返回的是一个数组,依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
$arr=array(1,2,3,4,5,6);
function filter($var){
if($var%2==0)
return true;
}
$data=array_filter($arr,"filter");
$data=array(2,4,6);
array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
$arr1=array('linux','Php','JAVA');
array_map('strtoupper',$arr1);
array_walk() 不会受到 array内部数组指针的影响。array_walk()会遍历整个数组而不管指针的位置。
用户不应在回调函数中改变该数组本身。例如增加/删除单元,unset 单元等等。如果 array_walk()作用的数组改变了,则此函数的的行为未经定义,且不可预期。注意回调函数接收的前两个参数第一个是值,第二个是键值,如果有第三个参数,则数组所有的值都共用这个参数。
function exchange($val,$key)
{
echo $val;
echo $key; }
$arr2=array('a'=>'linux','b'=>'php','c'=>'java','d'=>'mysql');
array_walk($arr2,'exchange');
示例二,将数组里的值变为大写,array_map()才是最佳选择,array_walk()和array_filter()不适合这种场景:
//使用array_map()函数
$arr = array('linux','Php','JAVA');
$map_arr = array_map('strtoupper',$arr);
var_dump($arr);
var_dump($map_arr); //使用array_walk()函数
$walk_arr = [];
function FunctionNames($val,$key)
{
$GLOBALS['walk_arr'][$key] = strtoupper($val);
} array_walk($arr,'FunctionNames');//函数返回值为bool true|false
var_dump($arr);
var_dump($walk_arr); //使用array_filter()函数
$walk_arr =[];
array_filter($arr,'FunctionNames',ARRAY_FILTER_USE_BOTH);
var_dump($arr);
var_dump($walk_arr);
总结:
map的第一个参数是函数,第二个是数组,而walk和filter的第一个参数是数组,第二个才是函数。
map 主要是为了得到你的回调函数处理后的新数组,要的是结果。
walk 主要是对每个参数都使用一次你的回调函数,要的是处理的过程。
walk 可以认为提供额外参数给回调函数,map不可以
walk 主要是要对数组内的每个值进行操作,操作结果影响原来的数组
map 主要是对数组中的值进行操作后返回数组,以得到一个新数组
walk 可以没有返回值 map要有,因为要填充数组
filter 如果函数返回值为true则返回数组的值,false不返回值,适合过滤的场景。
【转】php 之 array_filter、array_walk、array_map的区别的更多相关文章
- array_map,array_filter,array_walk区别
这几个方法都有遍历数组,操作的过程. 很容易搞混.尤其很多人养成的编程习惯都是使用foreach来循环遍历.. 就举个简单例子. $a = array( 0,1,2,3,4,5,6,7,8,9 ); ...
- array_filter、array_walk、array_map的区别
<?php $arr=array( 1,2,3,4,5,6 ); function filter($var){ if($var%2==0) return true; } $data=array_ ...
- PHP数组函数: array_walk()与 array_map() 的区别
详细的介绍如下: PHP数组函数: array_walk() PHP数组函数: array_map() 实际应用中的一点区别与总结: array_walk() 主要用于对某个数组的迭代,相当于 for ...
- array_filter、array_map、array_walk解释
/** * array_filter 用回调函数处理数组中的各个元素, * 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时, * 如果返回了false,那么这个元素将会被过滤掉.PS:保持了 ...
- array_walk 与 array_map的 区别
1.array_walk是用于用户自定义的函数,所以想用array_walk($aIds, "trim");去掉数据元素中的空格是达不到目的的只能用array_walk($aIds ...
- array_walk与array_map的区别
1.array_walk是用于用户自定义的函数,所以想用array_walk($aIds, "trim");去掉数据元素中的空格是达不到目的的只能用array_walk($aIds ...
- array_filter与array_map
php数组array_filter函数和array_slice函数:<?php /* array_filter()用回调函数过滤数组中的单元 array_filter(array,functio ...
- php数组操作集锦- 掌握了数组操作, 也就掌握了php
参考下面的文章, 是很好的: http://www.cnblogs.com/staven/p/5142515.html http://pcwanli.blog.163.com/blog/static/ ...
- PHP从入门到精通
php基本语法 1.变量类型 a.标量类型 bool integer float string b.复合类型 array object c.特殊类型 resource null d.伪类型 mixd ...
随机推荐
- HashMap,Hashset,ArrayList以及LinkedList集合的区别,以及各自的用法
基础内容 容器就是一种装其他各种对象的器皿.java.util包 容器:Set, List, Map ,数组.只有这四种容器. Collection(集合) 一个一个往里装,Map 一对一对往里装. ...
- mac及windows下安装ss实现***
官网下载shadowsock(mac/windows都是下面地址,页面会根据当前系统自动判断所下载的包) https://sourceforge.net/projects/shadowsocksgui ...
- IOS开发之关于UIButton点击没有响应问题
1.如果一个UIButton的frame超出父视图的frame,UIButton还是可以显现的,但响应不了点击事件了,当开发中,遇到UIButton点击没有响应问题时,我们需要输出btn及它父视图的f ...
- bat判断服务是否启动
sc query|find "tomcat6" && echo yes || echo nosc query|find "eventlog" & ...
- Eclipse添加默认的JRE
打开eclipse,依次点击如下选项Window->Preferences-> Java -> Installed JREs.步骤见下图. 选中Installed JREs选项出 ...
- 联玛客(W 笔试)
纸质算法题 1. 输入数据:1.3.2.4.8... 输出数据:3.1.4.2.8... 找出规律,写出一个程序求解,并附上时间复杂度和空间复杂度 我的答案: 规律一:奇偶位互换 假设输入数据长度为5 ...
- 世平信息(W 笔试)
选择题 大题 1.启动Thread的方法有几种 算法题 1.写出冒泡排序算法
- [bzoj4899]记忆的轮廓 题解(毒瘤概率dp)
题目背景 四次死亡轮回后,昴终于到达了贤者之塔,当代贤者夏乌拉一见到昴就上前抱住了昴“师傅!你终于回来了!你有着和师傅一样的魔女的余香,肯定是师傅”.众所周知,大贤者是嫉妒魔女沙提拉的老公,400年前 ...
- python3 yum not found
vi /urs/bin/yum 将#!/usr/bin/python的python改为python2.x(你系统的python2的版本)
- Linux下使用vi命令后退出方式
退出Vi 当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一. 在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出 ...