各種配列マージの結果の違いと考察 - うえちょこ@ぼろぐ 分室
文字列キーの配列(ハッシュ配列)の例
Variables
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
print_r($a+$b);
Array
(
[a] => apple
[b] => banana
[c] => cherry
)
print_r(array_merge($a, $b));
Array
(
[a] => pear
[b] => strawberry
[c] => cherry
)
print_r(array_merge_recursive($a, $b));
Array
(
[a] => Array
(
[0] => apple
[1] => pear
)
[b] => Array
(
[0] => banana
[1] => strawberry
)
[c] => cherry
)
キーに数字が混ざったときの例
Variables
$c = array('peach',
'grape',
10 => 'orange',
'a' => 'apple',
'b' => 'strawberry');
$d = array('lemon',
10 => 'kiwi',
'9' => 'banana',
'1' => 'cherry',
'a' => 'pear',
'c' => 'muscat');
print_r($c+$d);
Array
(
[0] => peach
[1] => grape
[10] => orange
[a] => apple
[b] => strawberry
[9] => banana
[c] => muscat
)
print_r(array_merge($c, $d));
Array
(
[0] => peach
[1] => grape
[2] => orange
[a] => pear
[b] => strawberry
[3] => lemon
[4] => kiwi
[5] => banana
[6] => cherry
[c] => muscat
)
print_r(array_merge_recursive($c, $d));
Array
(
[0] => peach
[1] => grape
[2] => orange
[a] => Array
(
[0] => apple
[1] => pear
)
[b] => strawberry
[3] => lemon
[4] => kiwi
[5] => banana
[6] => cherry
[c] => muscat
)
二次元配列の例
Variables
$e = array('cherry',
'a' => array('grape', 'a' => 'orange', 'b' => 'lemon'),
'b' => array('strawberry', 'a' => 'mango'),
4 => array('egg', 'ham'));
$f = array('kiwi',
'a' => 'peach',
'b' => array('muscat', 'a' => 'apple', 'b' => 'banana'),
4 => array('dog', 5 => 'cat'));
print_r($e+$f);
Array
(
[0] => cherry
[a] => Array
(
[0] => grape
[a] => orange
[b] => lemon
)
[b] => Array
(
[0] => strawberry
[a] => mango
)
[4] => Array
(
[0] => egg
[1] => ham
)
)
print_r(array_merge($e, $f));
Array
(
[0] => cherry
[a] => peach
[b] => Array
(
[0] => muscat
[a] => apple
[b] => banana
)
[1] => Array
(
[0] => egg
[1] => ham
)
[2] => kiwi
[3] => Array
(
[0] => dog
[5] => cat
)
)
print_r(array_merge_recursive($e, $f));
Array
(
[0] => cherry
[a] => Array
(
[0] => grape
[a] => orange
[b] => lemon
[1] => peach
)
[b] => Array
(
[0] => strawberry
[a] => Array
(
[0] => mango
[1] => apple
)
[1] => muscat
[b] => banana
)
[1] => Array
(
[0] => egg
[1] => ham
)
[2] => kiwi
[3] => Array
(
[0] => dog
[5] => cat
)
)
$b['c']は新しい文字列キーなので追加されている。
この結果から、+演算子の配列マージでは、同じ文字列キーなら上書きされないということがわかる。