(PHP 4 >= 4.0.6, PHP 5)
array_map — 將回調函數(shù)作用到給定數(shù)組的單元上
說明
array array_map ( callable$callback
, array $arr1
[, array $...
] )
array_map() 返回一個數(shù)組,該數(shù)組包含了
arr1
中的所有單元經(jīng)過
callback
作用過之后的單元。callback
接受的參數(shù)數(shù)目應該和傳遞給
array_map() 函數(shù)的數(shù)組數(shù)目一致。
參數(shù)
callback
對每個數(shù)組的每個元素作用的回調函數(shù)。
arr1
將被回調函數(shù)(callback
)執(zhí)行的數(shù)組。
array
將被回調函數(shù)(callback
)執(zhí)行的數(shù)組列表。
返回值
返回一個數(shù)組,該數(shù)組的每個元素都數(shù)組(arr1
)里面的每個元素經(jīng)過回調函數(shù)(callback
)處理了的。
范例
Example #1 array_map() 例子
<?php
function cube($n)
{
return($n * $n * $n);
}
$a = array(1, 2, 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>
這使得 $b 成為:
Array ( [0] => 1 [1] => 8 [2] => 27 [3] => 64 [4] => 125 )
Example #2 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)));
?>
Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 )
Example #3 array_map() - 使用更多的數(shù)組
<?php
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);
?>
以上例程會輸出:
// 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 ) )
通常使用了兩個或更多數(shù)組時,它們的長度應該相同,因為回調函數(shù)是平行作用于相應的單元上的。如果數(shù)組的長度不同,則最短的一個將被用空的單元擴充。
本函數(shù)一個有趣的用法是構造一個數(shù)組的數(shù)組,這可以很容易的通過用 NULL
作為回調函數(shù)名來實現(xiàn)。
Example #4 建立一個數(shù)組的數(shù)組
<?php
$a = array(1, 2, 3, 4, 5);
$b = array("one", "two", "three", "four", "five");
$c = array("uno", "dos", "tres", "cuatro", "cinco");
$d = array_map(null, $a, $b, $c);
print_r($d);
?>
以上例程會輸出:
Array ( [0] => Array ( [0] => 1 [1] => one [2] => uno ) [1] => Array ( [0] => 2 [1] => two [2] => dos ) [2] => Array ( [0] => 3 [1] => three [2] => tres ) [3] => Array ( [0] => 4 [1] => four [2] => cuatro ) [4] => Array ( [0] => 5 [1] => five [2] => cinco ) )
如果數(shù)組參數(shù)里面有字符串的鍵,那么返回的數(shù)組就會包含字符串的鍵,僅且僅當只傳入一個數(shù)組的時候(試了下,就是原數(shù)組返回,沒變化啊,這不是蛋疼么?)。 如果不止一個數(shù)組被傳入,那么返回的數(shù)組的的鍵都是整型。
Example #5 array_map() - with string keys
<?php
$arr = array("stringkey" => "value");
function cb1($a) {
return array ($a);
}
function cb2($a, $b) {
return array ($a, $b);
}
var_dump(array_map("cb1", $arr));
var_dump(array_map("cb2", $arr, $arr));
var_dump(array_map(null, $arr));
var_dump(array_map(null, $arr, $arr));
?>
以上例程會輸出:
array(1) { ["stringkey"]=> array(1) { [0]=> string(5) "value" } } array(1) { [0]=> array(2) { [0]=> string(5) "value" [1]=> string(5) "value" } } array(1) { ["stringkey"]=> string(5) "value" } array(1) { [0]=> array(2) { [0]=> string(5) "value" [1]=> string(5) "value" } }
參見
array_filter() - 用回調函數(shù)過濾數(shù)組中的單元 array_reduce() - 用回調函數(shù)迭代地將數(shù)組簡化為單一的值 array_walk() - 使用用戶自定義函數(shù)對數(shù)組中的每個元素做回調處理 create_function() - Create an anonymous (lambda-style) function callback 類型的信息