Home > PHP > PHPの配列結合の違いについてのまとめ

PHPの配列結合の違いについてのまとめ

トラックバックURL:

shimazakiです。

PHPで配列同士を結合する方法をまとめてみました。

array_merge

array array_merge ( array $array1 [, array $array2, ... ] )

特徴:
array1のキーが文字の場合、array2に同じキーがあれば、array2の値によって上書きされる。

PHP:
<?php
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge($arr1, $arr2);
var_dump($arr);
?>


arr1のk1がarr2のk1によって上書きされている。異なるキーはそのまま後ろに追加される

PHP:
array(2) {
["k1"]=>
string(3) "vv1"
["k2"]=>
string(2) "v2"
}


ただし、キーが数字の場合は上書きせず、追加する。

PHP:
<?php
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = array_merge($arr1, $arr2);
var_dump($arr);
?>


キーが数字の場合は同じキーであっても上書きされず、追加となる。
また、数字のキーは完全に振りなおされる。
数字と文字が混ざった配列の場合でも、数字は振りなおされ、結合される。

PHP:
array(3) {
[0]=>
string(2) "v1"
[1]=>
string(2) "v2"
[2]=>
string(3) "vv1"
}


array_merge_recursive

array array_merge_recursive ( array array1 [, array ...] )

特徴:
array1のキーが文字の場合、array2に同じキーがあれば、元の要素を配列に変換しarray2の値を追加する

PHP:
<?php
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>

元々のk1の要素が配列になり、arr2のk1の要素が追加される。
その際の添え字は数字となる。

PHP:
array(2) {
["k1"]=>
array(2) {
[0]=>
string(2) "v1"
[1]=>
string(3) "vv1"
}
["k2"]=>
string(2) "v2"
}

ただし、キーが数字の場合はarray_mergeと同じ動作となる。

PHP:
<?php
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>

array_mergeと同じ結果。

PHP:
array(3) {
[0]=>
string(2) "v1"
[1]=>
string(2) "v2"
[2]=>
string(3) "vv1"
}


加算演算子

特徴:
左側に右側を追加する。ただし、同じキーの場合、追加しない

PHP:
<?php
$arr1 = array('k1'=>'v1''k2'=>'v2');
$arr2 = array('k1'=>'vv1', 'k3'=>'vv3');
$arr = $arr1 + $arr2;
var_dump($arr);
?>

同じキーがある場合、array_mergeとは違い、上書きをせず、また、追加もしない。

PHP:
array(3) {
["k1"]=>
string(2) "v1"
["k2"]=>
string(2) "v2"
["k3"]=>
string(3) "vv3"
}

また、数字であっても上書きもせず、追加もされず、キーも振りなおされない。

PHP:
<?php
$arr1 = array(10=>'v1', 1=>'v2');
$arr2 = array(10=>'vv1');
$arr = $arr1 + $arr2;
var_dump($arr);
?>
PHP:
array(2) {
[10]=>
string(2) "v1"
[1]=>
string(2) "v2"
}

以上です。

配列を加算演算子で扱えるというのが何ともPHPらしいですが、その動きはあんまり加算っぽくないように思います。

この記事へのコメント: 0件

コメントをどうぞ
上記情報を記憶する(次回から入力の手間が省けます)

トラックバック+ピンバック: 0件

Home > PHP > PHPの配列結合の違いについてのまとめ

ページ
メタ情報

Page Top