いまさらながら調べてみた。
まずはPHPのマニュアル
array_merge
前の配列の後ろに配列を追加することにより、 ひとつまたは複数の配列の要素をマージし、得られた配列を返します。
入力配列が同じキー文字列を有していた場合、そのキーに関する後に指定された値が、 前の値を上書きします。しかし、配列が同じ添字番号を有していても 値は追記されるため、このようなことは起きません。
入力配列の中にある数値添字要素の添字の数値は、 結果の配列ではゼロから始まる連続した数値に置き換えられます。
キーは上書きで、添字番号は追加でいいのか?試してみた。
<?php
$x = array('a', 'b');
$y = array('c', 'd', 'e');
var_dump(array_merge($x, $y));
?>
を実行すると、
array(5) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
[4]=>
string(1) "e"
}
確かに後に追加されている。
同様に+演算子。
<?php
$x = array('a', 'b');
$y = array('c', 'd', 'e');
var_dump($x + $y);
?>
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "e"
}
こちらは同じ添字番号だと上書きせず、なかったら追加している。
次に連想配列の結合。
<?php
$x = array(
'K1' => 'a',
'K2' => 'b'
);
$y = array(
'K1' => 'c',
'K2' => 'd',
'K3' => 'e'
);
var_dump(array_merge($x, $y));
var_dump($x + $y);
?>
array_merge
array(3) {
["K1"]=>
string(1) "c"
["K2"]=>
string(1) "d"
["K3"]=>
string(1) "e"
}
同じキーは上書きして、なかったら追加。
+演算子
array(3) {
["K1"]=>
string(1) "a"
["K2"]=>
string(1) "b"
["K3"]=>
string(1) "e"
}
こちらは、先ほどと同様キーがなかったら追加している。
では、混じっていたらどうなるんだろう?
<?php
$x = array(
'K1' => 'a',
1 => 'b'
);
$y = array(
'K1' => 'c',
'1' => 'd',
2 => 'e'
);
var_dump(array_merge($x, $y));
var_dump($x + $y);
?>
array_merge
array(4) {
["K1"]=>
string(1) "c"
[0]=>
string(1) "b"
[1]=>
string(1) "d"
[2]=>
string(1) "e"
}
キーは上書き、添字は追加。ここで気になるのは、添字の1と’1’が区別されてること。
+演算子
array(3) {
["K1"]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "e"
}
こちらは一貫して添字がなかったら追加。
+演算子を使うシーンがあまりないかな。(でもどこかで使っていたような?)
うーん、array_mergeって、結合後の戻り値は0からの添字を振り直すのだから、キーの時も上書きなんてせずに追加だけしてくれれば良くないか?
$z = array_merge(array_values($x), array_values($y));
とやって置けば確実に配列が追加される。
taira
最新記事 by taira (全て見る)
- 翻訳リソースファイル(.po)をXLIFF形式(.xlf)に変換する - 2014年6月27日
- 一杯のラーメン - 2014年6月26日
- Macで翻訳ファイル*.poをmo形式に変換する - 2014年6月4日
Comments are closed.