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 のキーを失うつもりはないので、これは非常に面倒です。並列配列を反復する簡単な方法はありますか (反復子クラスを使用したり、配列に等しいキーを与えたりする必要はありません)? 1 つのオプションは、次のように手動で呼び出す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