先看语法
array array_map ( callback $callback , array $arr1 [, array $... ] )
说明:
array_map() 返回一个array,该数组包含所有arr1中被$callback逐个处理过的元素。callback函数的参数的个数,应当和传入array_map()的参数个数相匹配。
其实array_map是中高阶函数,(高阶函数为使用其他函数作为参数的函数),并且该高阶函数又隐式得进行了循环。
参数
callback
-
每个array中的每行都会运行的回调函数.
arr1
-
交给回调函数运行处理的数组
array
-
数组形式的变量列表参数,并会传入callback,让其使用
举例
//array_map() using a lambda function (as of PHP 5.3.0)
<?php
$func = function($value) {
return $value * 2;
};
print_r(array_map($func, range(1, 5)));
?>
以上的函数的功能很简单,callback为$func,arr1也就是要处理的数组range(1,5)。额外要注意的是这里的函数定义方法是lamda函数,当然和传统的lamda表达式还不一样。在PHP5.3.0中引入的。
Output
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )
接下来再看一个例子,这次使用多参数的
<?php
//using more arrays
function show_Spanish($n, $m)
{
return("The number $n is called $m in Spanish");
}
function map_Spanish($n, $m)
{
return(array($n => $m));
}
$a = array(1, 2, 3, 4, 5);
$b = array("uno", "dos", "tres", "cuatro", "cinco");
$c = array_map("show_Spanish", $a, $b);
print_r($c);
$d = array_map("map_Spanish", $a , $b);
print_r($d);
?>
此处是两个参数,所以,我们也可以知道,传入array_map中的参数一定会有两个数组,这个和说明中的参数匹配是一致的。
额外需要注意一点,两个传入array_map的数组参数的count/length一定一致,否则出错
Output
// printout of $c Array ( [0] => The number 1 is called uno in Spanish [1] => The number 2 is called dos in Spanish [2] => The number 3 is called tres in Spanish [3] => The number 4 is called cuatro in Spanish [4] => The number 5 is called cinco in Spanish ) // printout of $d Array ( [0] => Array ( [1] => uno ) [1] => Array ( [2] => dos ) [2] => Array ( [3] => tres ) [3] => Array ( [4] => cuatro ) [4] => Array ( [5] => cinco ) )
下面我们来看个更复杂的例子
<?php
//complicated condition
function doSomething($a,$b)
{
foreach($a as $v)
{
$v=$v+$b;
}
}
$a=array("one"=>1,"two"=>2);
$arra=array($a,$a,$a);
$b=4;
$arrb=array_fill(0,count($arra),$b)
$d = array_map("doSomething", $arra , $arrb);
print_r($d);
此处,我们不仅用到了关联数组,同时,还针对了,一个参数为数组,一个参数为常数的。这个时候array_map传入的将是一个二维数组和一个一维数组。此处的$arra只是为了简单组了随意的拼凑,所以看上去比较怪。但是这里的关键是虽然两数组参数维度不一致,但是他们的length一致就可以了。具体的维度是由callback的参数决定的。