【转】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 ...
随机推荐
- 微信小程序 插件介绍
小程序的插件是对一组js接口.自定义组件或页面的封装.插件不能独立运行,必须嵌入在其他小程序中才能被用户使用:而第三方小程序在使用插件时,也无法看到插件的代码.因此,插件适合用来封装自己的功能或服务, ...
- Thrift入门及Java实例演示【转】
概述 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++.Java.Python.PHP.Ruby.Erlang.Perl.Ha ...
- Open Cascade创建自己的MFC文档程序
项目初始设置在Visual studio中创建一个单文档MFC项目(本例以MFCTest为名称): 在项目属性的VC++页面设置包含目录.库目录,在链接器的输入中添加OCC库目录下的所有.lib文件名 ...
- PHP11 日期和时间
学习要点 UNIX时间戳 将其他格式的日期转成UNIX时间戳格式 基于UNIX时间戳的日期计算 获取并格式化输出日期 修改PHP的默认时间 微秒的使用 Unix时间戳 相关概念 Unix tim ...
- [Java]Java工程师成神之路
http://blog.csdn.net/sunnyyoona/article/details/50384595
- ios之UITextfield (2)
UItextField通常用于外部数据输入,以实现人机交互.下面以一个简单的登陆界面来讲解UItextField的详细使用. //用来显示“用户名”的label UILabel* label1 = [ ...
- Sqlserver添加加字段、删除字段、修改字段类型、修改字段名、修改字段默认值
参考:https://www.cnblogs.com/pangpanghuan/p/6432331.html 初始化表: --.添加字段 --1.1.为null alter table DataTab ...
- js hover 下拉框
<div class="box"> <div class="a f">111111</div> <div class= ...
- Multiplication Puzzle POJ - 1651
解法 区间dp例题,长度从2开始到n结束起点从1到n,中间枚举的时候是看着左端点右端点与中点的乘积 代码 #include <iostream> #include <cstring& ...
- [CF] 219D Choosing Capital for Treeland
题意翻译 题目描述 Treeland国有n个城市,这n个城市连成了一颗树,有n-1条道路连接了所有城市.每条道路只能单向通行.现在政府需要决定选择哪个城市为首都.假如城市i成为了首都,那么为了使首都能 ...