PHP中array_map的使用

本文详细介绍了 PHP 中的 array_map 函数,包括其语法、参数及如何使用该函数进行数组处理。通过多个实例展示了 array_map 的应用,例如使用匿名函数处理数组元素,以及处理多个数组参数等。
摘要由CSDN通过智能技术生成

先看语法

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的参数决定的。

 

转载于:https://www.cnblogs.com/JosephLiu/archive/2011/11/11/2245300.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值