数组映射在提供多个数组参数时截断原始键

时间:2013-08-31 18:32:53

标签: php arrays

以下代码:

$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));

但感觉有点脏。

1 个答案:

答案 0 :(得分:1)

这是记录在案的行为(http://php.net/array_map#example-4917及其上方一行)

每个解决方案都会感觉很脏,但我只会使用array_combinearray_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)
);