以下代码:
$array = array("key1" => "value1", "key2" => "value2");
print_r(array_map(function($v) {return $v . $v;}, $array));
有预期的结果:
Array
(
[key1] => value1value1
[key2] => value2value2
)
但是,添加任意并行数组作为数组映射的参数似乎会调用意外行为:
$array = array("key1" => "value1", "key2" => "value2");
$array2 = array(1, 2);
print_r(array_map(function($v, $v2) {return $v . $v;}, $array, $array2));
这导致:
Array
(
[0] => value1value1
[1] => value2value2
)
如您所见,数组键已被数字索引替换。现在我发现这很烦人,因为我不打算丢失$ array的密钥。是否有一种简单的方法来迭代并行数组(不涉及迭代器类或给予数组相等的键)?一个选项可能是手动调用next()
,如下所示:
$array = array("key1" => "value1", "key2" => "value2");
$array2 = array(1, 2);
print_r(array_map(function($v) use ($array2) {
$v2 = current($array2);
next($array2);
return $v . $v;
}, $array));
但感觉有点脏。
答案 0 :(得分:1)
这是记录在案的行为(http://php.net/array_map#example-4917及其上方一行)
每个解决方案都会感觉很脏,但我只会使用array_combine
和array_keys
:
$array = array("key1" => "value1", "key2" => "value2");
$array2 = array(1, 2);
$final = array_combine(
array_keys($array),
array_map(function($v, $v2) {return $v . $v;}, $array, $array2)
);