浅析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水印技术
Feb 14 PHP
PHP 转义使用详解
Jul 15 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
php给图片加文字水印
Jul 31 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
基于thinkPHP实现的微信自定义分享功能示例
Sep 23 PHP
PHP实现的贪婪算法实例
Oct 17 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
PHP PDOStatement::fetch讲解
Jan 31 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 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 反向排序和随机排序代码
2010/06/30 PHP
PHP在不同页面间传递Json数据示例代码
2013/06/08 PHP
PHP文件大小格式化函数合集
2014/03/10 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
PHP Streams(流)详细介绍及使用
2015/05/12 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
IE8 原生JSON支持
2009/04/13 Javascript
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
jQuery中:first-child选择器用法实例
2014/12/31 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
JavaScript手机振动API
2016/06/11 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
原生JS封装animate运动框架的实例
2017/10/12 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
小程序组件之仿微信通讯录的实现代码
2018/09/12 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
Python中shape计算矩阵的方法示例
2017/04/21 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
美国时尚在线:Showpo
2017/09/08 全球购物
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
简历中自我评价范文3则
2013/12/14 职场文书
管理专员自荐信
2014/01/26 职场文书
民事赔偿协议书
2014/11/02 职场文书
安全隐患整改报告
2014/11/06 职场文书
安全生产会议制度
2015/08/06 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
7个关于Python的经典基础案例
2021/11/07 Python
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
2022/04/07 Servers