浅析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 相关文章推荐
php正则
Jul 07 PHP
php 的加密函数 md5,crypt,base64_encode 等使用介绍
Apr 09 PHP
比较好用的PHP防注入漏洞过滤函数代码
Apr 11 PHP
PHP 第一节 php简介
Apr 28 PHP
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
May 27 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
PHP与Perl之间知识点区别整理
Mar 19 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 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
模拟xcopy的函数
2006/10/09 PHP
4.与数据库的连接
2006/10/09 PHP
php比较相似字符串的方法
2015/06/05 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
JS中的log对象获取以及debug的写法介绍
2014/03/03 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
Python模仿POST提交HTTP数据及使用Cookie值的方法
2014/11/10 Python
Python pass详细介绍及实例代码
2016/11/24 Python
python3 反射的四种基本方法解析
2019/08/26 Python
python hashlib加密实现代码
2019/10/17 Python
python实现随机加减法生成器
2020/02/24 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
青年教师典范事迹材料
2014/01/31 职场文书
职工趣味运动会方案
2014/02/10 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
校园之声广播稿
2015/08/18 职场文书
opencv深入浅出了解机器学习和深度学习
2022/03/17 Python
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android