次のコード:
$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));
でもちょっと汚い感じ。