浅析php中array_map和array_walk的使用对比


Posted in PHP onNovember 20, 2016

一、array_map()

     1、array_map() 函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组,若函数作用后无返回值,则对应的新值数组中为空。

     2、回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

     3、提示:您可以向函数输入一个或者多个数组。

            若相函数输入2个数组,其函数接受参数也应该有两个,map给函数传值时,是每次从两个数组中分别取一个传给函
数。即多个数组之间是同步提交的,不是提交完一个数组再提交下一个提交几个数组,则函数也需要有几个参数

     4、语法: array array_map ( callable callback,arrayarr1 [, array $… ] )

实例:

<?php 
//单数组形式
function myfunction($v)
{
 if ($v==="Dog")
 {
  return "Fido";
 }
 return $v;
}

$a=array("Horse","Dog","Cat");
print_r(array_map("myfunction",$a));

//多数组形式
function myfunction1($v1,$v2)
{
 if ($v1===$v2)
 {
  return "same";
 }
 return "different";
}

$a1=array("Horse","Dog","Cat");
$a2=array("Cow","Dog","Rat");
print_r(array_map("myfunction1",$a1,$a2));
?>

二、array_walk()

     1、array_walk — 使用用户自定义函数对数组中的每个元素做回调处理

     2、语法: bool array_walk ( array &array,callablefuncname [, mixed $userdata = NULL ] )

参数:

 $array     输入的数组。

 $funcname  回调函数,典型情况下 $funcname 接受两个参数。$array 参数的值作为第一个, 键名作为第二个。

 $userdata  如果提供了可选参数 $userdata ,将被作为第三个参数传递给 $funcname。

注意:

如果 $funcname 需要直接作用于数组中的值,则给 funcname 的第一个参数指定为引用(添加&符号)。这样
任何对这些单元的改变也将会改变原始数组本身。

返回值 :

成功时返回 TRUE, 或者在失败时返回 FALSE。

实例:

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
//传引用,改变了所传参数组
function test_alter(&$item1, $key, $prefix)
{
 $item1 = "$prefix: $item1";
}

function test_print($item2, $key)
{
 echo "$key. $item2<br />\n";
}

echo "Before ...:\n";
//单数组
array_walk($fruits, 'test_print');

//带额外参数
array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";

array_walk($fruits, 'test_print');

以上例程会输出:

Before ...:
d. lemon
a. orange
b. banana
c. apple
 ... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple

关键点:

 map    主要是为了得到你的回调函数处理后的新数组,要的是结果。

 walk   主要是对每个参数都使用一次你的回调函数,要的是处理的过程。

 walk   可以认为提供额外参数给回调函数,map不可以

 walk   主要是要对数组内的每个值进行操作,操作结果影响原来的数组

 map    主要是对数组中的值进行操作后返回数组,以得到一个新数组

 walk   可以没有返回值 map要有,因为要填充数组

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
桌面中心(二)数据库写入
Oct 09 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
Jul 23 PHP
php之Memcache学习笔记
Jun 17 PHP
PHP中的reflection反射机制测试例子
Aug 05 PHP
PHP递归创建多级目录
Nov 05 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
php从身份证获取性别和出生年月
Feb 09 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
php微信公众号开发之关键词回复
Oct 20 PHP
PHP实现计算器小功能
Aug 28 PHP
php解决DOM乱码的方法示例代码
Nov 20 #PHP
使用Yii2实现主从数据库设置
Nov 20 #PHP
php 二维数组时间排序实现代码
Nov 19 #PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 #PHP
php socket通信简单实现
Nov 18 #PHP
php微信开发之自定义菜单实现
Nov 18 #PHP
php微信开发之百度天气预报
Nov 18 #PHP
You might like
萌王史莱姆”萌王性别尴尬!那“萌战”归女组还是男?
2018/12/17 日漫
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
YII框架关联查询操作示例
2019/04/29 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
深入理解JSON数据源格式
2014/01/10 Javascript
jquery中$(#form :input)与$(#form input)的区别
2014/08/18 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
百度地图api如何使用
2015/08/03 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
Python zip()函数用法实例分析
2018/03/17 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
使用tensorflow实现线性回归
2018/09/08 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
python能在浏览器能运行吗
2020/06/17 Python
python利用xpath爬取网上数据并存储到django模型中
2021/02/26 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
音乐学个人的自荐书范文
2013/11/26 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
残疾人小组计划书
2014/04/27 职场文书
小学毕业感言200字
2015/07/30 职场文书
四群教育工作总结
2015/08/10 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android