使用规范的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使用与原始数组中相同的键。有没有办法做到这一点?谢谢!
答案 0 :(得分:2)
$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
)