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

一、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要有,因为要填充数组

总结

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

(0)

相关推荐

  • PHP中的extract的作用分析

    addslashes -- 使用反斜线引用字符串 extract(addslashes($_POST)); --处理POST表单      把客户端<FORM METHOD="POST"...>表单中的变量名取出来. extract(addslashes($_GET)); --处理GET表单      把客户端<FORM METHOD="GET"...>表单中的变量名取出来.

  • VBScript版的PHP extract()函数

    写过PHP的都知道,其有个extract()非常方便,可以便捷的将字典转换为变量,当然到ASP中则要受限很多,特别是VBScript脚本,本文叙述的就是一种转换的思路,可以实现类似的功能. 下面我就直接提供ASP版本的extract代码吧: 复制代码 代码如下: '' ASP/VBScript Dictionary extract' Author: WangYe' For more information please visit'     ' This code is distributed

  • php.ini中date.timezone设置详解

    date.timezone设置php5默认date.timezone为utc,改为date.timezone = PRC即可解决时间相差八小时的问题,但我在php的官方文档中看了半天也没找到这个参数啊 虽然知道这个参数表示"中华人民共和国"的意思,但官方文档 中并没有这样的参数,只有Asia/Shanghai.Asia/Hong_Kong等这些参数啊,为何这里可以设置为RPC,哪位给指点指点,这个参数 究竟是在哪儿?官方文档中看来看去的确并没有此参数啊,不解. 一般都设成Asia/Sh

  • PHP中extract()函数的定义和用法

    定义和用法 PHP extract() 函数从数组中把变量导入到当前的符号表中. 对于数组中的每个元素,键名用于变量名,键值用于变量值. 第二个参数 type 用于指定当某个变量已经存在,而数组中又有同名元素时,extract() 函数如何对待这样的冲突. 本函数返回成功设置的变量数目. 语法 extract(array,extract_rules,prefix) 参数 描述 array 必需.规定要使用的输入. extract_rules 可选.extract() 函数将检查每个键名是否为合法

  • PHP中extract()函数的妙用分析

    近日在看一个牛人的代码时,看到一个非常好用的函数:extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具,比方说,可以很方便的提取$_POST或者$_GET的元素,对表单提交上来的内容不能不用一一赋值,直接使用下面代码: form.html 复制代码 代码如下: <form action="action.php" method="post"> <input type="te

  • PHP extract 将数组拆分成多个变量的函数

    extract()函数语法: int extract( array $var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix ]] ) 功能: extract()函数提取关联数组(对数字索引数组无效)每对key和value,生成以key为变量名.value为对应值的多组新变量. 复制代码 代码如下: <?php $size = "old size"; //注意最后size变量的值. $a = array(

  • php 二维数组时间排序实现代码

    昨天要排序数组的时候发现了,要按时间排序,但是php并没有内设这个函数,所以在网上找到了这个代码,第一个参数为数组,第二个是要排序的元素,第三个为排序方式, 下面就是php 二维数组排序的代码 function arraySort($arr, $keys, $type = 'asc') { $keysvalue = $new_array = array(); foreach ($arr as $k => $v){ $keysvalue[$k] = $v[$keys]; } $type == 'a

  • php 数组处理函数extract详解及实例代码

    php 数组处理函数extract extract函数用于从数组中将变量导入到当前的符号表 基本语法 int extract ( array &$var_array [, int $extract_type = EXTR_OVERWRITE [, string $prefix = NULL ]] ) 本函数用来将变量从数组中导入到当前的符号表中.检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突. 参数介绍: 参数 描述 var_array 必需.规定要使用的数组

  • php socket通信简单实现

    socket通信的原理在这里就不说了,它的用途还是比较广泛的,我们可以使用socket来做一个API接口出来,也可以使用socket来实现两个程序之间的通信,我们来研究一下在php里面如何实现socket通信. 由于socket服务端的代码要监听端口,等待接收请求,所以php在做socket服务的时候需要将php文件运行在CMD里面. 如果要使php文件可以在CMD里面运行,则需要进行如下设置: 1.添加环境变量,名字为PHP_HOME,值为php文件安装目录下的.exe文件地址,如D:\wam

  • php的socket编程详解

    php的socket编程算是比较难以理解的东西吧,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了,在笔者看来,socket编程,其实就是建立一个网络服务的客户端和服务端,这和mysql的客户端和服务端是一样的,你只要理解mysql的客户端和服务端是怎么一回事,你就应该能够理解下面我要讲的东西吧. 关于socket编程所涉及到的网络协议,什么TCP啊,UDP啊,什么socket三次握手等等,这些网络协议网上有很详细的解释,这里不讲,只截个sock

  • PHP内置加密函数详解

    Md5()加密算法 方式: 单向加密 语法: md5(string $str [, bool $raw_output = false]) $str:原始字符串 $raw_output:如果可选的raw_output被设置为true, 那么md5报文摘要将以16字节长度的原始二进制格式返回. 返回以32位字符十六进制数字形式返回散列值 md5二次加密:md5(md5($string, true)) Crypt()加密算法 方式: 单向加密 语法: string crypt(string $str[

  • php PDO异常处理详解

    异常处理: PHP:默认为直接报错 MYSQL:默认为静默模式,错就错,不报错 PDO:默认为静默模式,错就错,不报错 以前,当PHP碰到错误的时候,会直接报错,错误处理会变得相当麻烦.后来,当错误发生之后,会将错误信息不再直接输出,放到一个类的对象里(PDOException) pdo异常处理设置: 设置PDO::ATTR_ERRMODE ,有以下三个值: PDO::ERRMODE_SILENT: 默认模式,不主动报错,需要主动以 $pdo->errorInfo()的形式获取错误信息. PDO

随机推荐