如何使用array_map来指定键?

时间:2013-07-03 18:48:23

标签: php

使用规范的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
)

但我真正希望它输出的是这些方面: 阵列

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

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

4 个答案:

答案 0 :(得分:2)

使用array_combine()

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

您可以从this demo看到它产生:

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

答案 1 :(得分:1)

不使用array_map,它只显示地图values。但是这样做:

array_combine($a, array_map('cube', $a))

答案 2 :(得分:1)

您可以使用array_map来修改给定的数组,而不是使用返回已修改数组的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
)

答案 3 :(得分: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
)