2010年03月17日

配列をマージするのにarray_merge()と+とどっちを使ったらいいのかな?の件

2つの配列をマージするのに、array_merge()と配列演算子の+とどちらを使ったらよいのかよくわからなくなるのでメモしておきます。

array_merge()関数

配列をマージします。

$arr1 = array(1, 2, 3);
$arr2 = array(4, 5, 6);
$result = array_merge($arr1, $arr2);

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)


値が同じでも関係ない。

$arr1 = array(1, 2, 3);
$arr2 = array(1, 2, 3);
$result = array_merge($arr1, $arr2);

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 1
[4] => 2
[5] => 3
)


同じキーは上書きされる。後の配列で上書きされる。

$arr1 = array('a' => 1, 'b' => 2, 'c' => 3);
$arr2 = array('b' => 4, 'c' => 5, 'd' => 6);
$result = array_merge($arr1, $arr2);

Array
(
[a] => 1
[b] => 4
[c] => 5
[d] => 6
)


数値添字は振り直される。

$arr1 = array(1 => 1, 3 => 2, 5 => 3);
$arr2 = array(7 => 4, 9 => 5, 11 => 6);
$result = array_merge($arr1, $arr2);

Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
)


キーと数値添字が混ざっていても、数値添字は振り直される。

$arr1 = array(1 => 1, 'a' => 2, 5 => 3);
$arr2 = array('b' => 4, 9 => 5, 'c' => 6);
$result = array_merge($arr1, $arr2);

Array
(
[0] => 1
[a] => 2
[1] => 3
[b] => 4
[2] => 5
[c] => 6
)




配列演算子+

左にないキーを追加します。以下の場合数値添字0,1,2は左にあるので追加されません。

$arr1 = array(1, 2, 3);
$arr2 = array(4, 5, 6);
$result = $arr1 + $arr2;

Array
(
[0] => 1
[1] => 2
[2] => 3
)



値が同じでも関係ない。

$arr1 = array(1, 2, 3);
$arr2 = array(1, 2, 3);
$result = $arr1 + $arr2;

Array
(
[0] => 1
[1] => 2
[2] => 3
)


同じキーは上書きされないし、追加もされない。

$arr1 = array('a' => 1, 'b' => 2, 'c' => 3);
$arr2 = array('b' => 4, 'c' => 5, 'd' => 6);
$result = $arr1 + $arr2;

Array
(
[a] => 1
[b] => 2
[c] => 3
[d] => 6
)



数値添字でも左にければ追加される。

$arr1 = array(1 => 1, 3 => 2, 5 => 3);
$arr2 = array(7 => 4, 9 => 5, 11 => 6);
$result = $arr1 + $arr2;

Array
(
[1] => 1
[3] => 2
[5] => 3
[7] => 4
[9] => 5
[11] => 6
)


キーと数値添字が混ざっていても、左になければ追加される。

$arr1 = array(1 => 1, 'a' => 2, 5 => 3);
$arr2 = array('b' => 4, 9 => 5, 'c' => 6);
$result = $arr1 + $arr2;

Array
(
[1] => 1
[a] => 2
[5] => 3
[b] => 4
[9] => 5
[c] => 6
)






ちなみに。

これは?

$arr1 = array('001' => 1, 'a' => 2, '005' => 3);
$arr2 = array('b' => 4, '009' => 5, 'c' => 6);
$result = array_merge($arr1, $arr2);

Array
(
[001] => 1
[a] => 2
[005] => 3
[b] => 4
[009] => 5
[c] => 6
)



$arr1 = array('001' => 1, 'a' => 2, '005' => 3);
$arr2 = array('b' => 4, '009' => 5, 'c' => 6);
$result = $arr1 + $arr2;

Array
(
[001] => 1
[a] => 2
[005] => 3
[b] => 4
[009] => 5
[c] => 6
)



これは?

$arr1 = array(1.0 => 1, 'a' => 2, '005' => 3);
$arr2 = array('1' => 4, '009' => 5, 'c' => 6);
$result = array_merge($arr1, $arr2);

Array
(
[0] => 1
[a] => 2
[005] => 3
[1] => 4
[009] => 5
[c] => 6
)



$arr1 = array(1.0 => 1, 'a' => 2, '005' => 3);
$arr2 = array('1' => 4, '009' => 5, 'c' => 6);
$result = $arr1 + $arr2;

Array
(
[1] => 1
[a] => 2
[005] => 3
[009] => 5
[c] => 6
)


同じキーだったら上書きしないで、数値添字だったら振りなおして追加してくれる!っていうのはないのかしら?
posted by ほえ at 11:04| Comment(0) | TrackBack(0) | PHP | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。