0

以下代码:

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

但是感觉有点脏。

4

1 回答 1

1

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

每个解决方案都会让人觉得很脏,但我会只使用array_combineand 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)
);
于 2013-08-31T18:42:37.643 回答