2

使用规范的 PHPdoc 示例,此代码:

<?php
function cube($n)
{
    return($n * $n * $n);
}

$a = array( 3, 4, 5);
$b = array_map("cube", $a);
print_r($b);
?>

输出

大批

(
    [0] => 27
    [1] => 64
    [2] => 125
)

但我真正希望它输出的是这些方面的内容:Array

(
    [3] => 27
    [4] => 64
    [5] => 125
)

也就是说,我希望 array_map 使用与原始数组中相同的键。有没有办法做到这一点?谢谢!

4

4 回答 4

2

使用array_combine()

$b = array_combine( $a, array_map("cube", $a));

您可以从这个演示中看到它产生:

Array
(
    [3] => 27
    [4] => 64
    [5] => 125
)
于 2013-07-03T18:50:00.497 回答
1

不使用array_map,它明确地只映射values。但这会做:

array_combine($a, array_map('cube', $a))
于 2013-07-03T18:50:34.937 回答
1

您可以使用which 可以修改给定数组,而不是使用array_mapwhich 返回修改后的数组。array_walk请注意,array_walk如果您打算更改它们,则使用的回调需要通过引用接受其参数

<?php    
$cube = function(&$x) {
    // Modify $x by reference
    $x = pow($x, 3);
};

$data = array(
    3 => 3,
    4 => 4,
    5 => 5
);

array_walk($data, $cube);

print_r($data);

这打印

Array
(
    [3] => 27
    [4] => 64
    [5] => 125
)
于 2013-07-03T18:57:49.447 回答
1

虽然您不能使用 array_map 重写键,但您可以使用带有闭包的 array_reduce (PHP 5.3+)

<?php
function cube($n){
    return $n*$n*$n;
}

$data = array(3,4,5);
$function = "cube";
$res = array_reduce($data, function(&$result = array(), $item) use($function){

   if (!is_array($result)){
    $result = array();
   };
   $result[$item] = $function($item);
   return $result;
});

print_r($res);

输出是

Array
(
    [3] => 27
    [4] => 64
    [5] => 125
)
于 2013-07-03T19:10:16.660 回答