浅析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 相关文章推荐
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
类的另类用法--数据的封装
Oct 09 PHP
php自动注册登录验证机制实现代码
Dec 20 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
Nov 04 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
php文件上传的两种实现方法
Apr 04 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 PHP
php中用unset销毁变量并释放内存
May 10 PHP
PHP7移除的扩展和SAPI
Mar 09 PHP
php修改word的实例方法
Nov 17 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
php使用curl发送json格式数据实例
2013/12/17 PHP
PHP中session变量的销毁
2014/02/27 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
2014/05/07 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
2017/02/19 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
详解Vue文档中几个易忽视部分的剖析
2018/03/24 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
2020/12/07 Javascript
python使用reportlab实现图片转换成pdf的方法
2015/05/22 Python
使用Python神器对付12306变态验证码
2016/01/05 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
Python OpenCV处理图像之图像像素点操作
2018/07/10 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
香港演唱会订票网站:StubHub香港
2019/10/10 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
好军嫂事迹材料
2014/01/15 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
2014年手术室工作总结
2014/11/26 职场文书
2014年小学体育工作总结
2014/12/11 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
MySQL图形化管理工具Navicat安装步骤
2021/12/04 MySQL
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript