- 2008年10 月6日(月)
- PHP
shimazakiです。
PHPで配列同士を結合する方法をまとめてみました。
array_merge
array array_merge ( array $array1 [, array $array2, ... ] )
特徴:
array1のキーが文字の場合、array2に同じキーがあれば、array2の値によって上書きされる。
<?php
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge($arr1, $arr2);
var_dump($arr);
?>
arr1のk1がarr2のk1によって上書きされている。異なるキーはそのまま後ろに追加される
array(2) {
["k1"]=>
string(3) "vv1"
["k2"]=>
string(2) "v2"
}
ただし、キーが数字の場合は上書きせず、追加する。
<?php $arr1 = array(10=>'v1', 1=>'v2'); $arr2 = array(10=>'vv1'); $arr = array_merge($arr1, $arr2); var_dump($arr); ?>
キーが数字の場合は同じキーであっても上書きされず、追加となる。
また、数字のキーは完全に振りなおされる。
数字と文字が混ざった配列の場合でも、数字は振りなおされ、結合される。
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
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1');
$arr = array_merge_recursive($arr1, $arr2);
var_dump($arr);
?>
元々のk1の要素が配列になり、arr2のk1の要素が追加される。
その際の添え字は数字となる。
array(2) {
["k1"]=>
array(2) {
[0]=>
string(2) "v1"
[1]=>
string(3) "vv1"
}
["k2"]=>
string(2) "v2"
}
ただし、キーが数字の場合はarray_mergeと同じ動作となる。
<?php $arr1 = array(10=>'v1', 1=>'v2'); $arr2 = array(10=>'vv1'); $arr = array_merge_recursive($arr1, $arr2); var_dump($arr); ?>
array_mergeと同じ結果。
array(3) {
[0]=>
string(2) "v1"
[1]=>
string(2) "v2"
[2]=>
string(3) "vv1"
}
加算演算子
特徴:
左側に右側を追加する。ただし、同じキーの場合、追加しない
<?php
$arr1 = array('k1'=>'v1', 'k2'=>'v2');
$arr2 = array('k1'=>'vv1', 'k3'=>'vv3');
$arr = $arr1 + $arr2;
var_dump($arr);
?>
同じキーがある場合、array_mergeとは違い、上書きをせず、また、追加もしない。
array(3) {
["k1"]=>
string(2) "v1"
["k2"]=>
string(2) "v2"
["k3"]=>
string(3) "vv3"
}
また、数字であっても上書きもせず、追加もされず、キーも振りなおされない。
<?php $arr1 = array(10=>'v1', 1=>'v2'); $arr2 = array(10=>'vv1'); $arr = $arr1 + $arr2; var_dump($arr); ?>
array(2) {
[10]=>
string(2) "v1"
[1]=>
string(2) "v2"
}
以上です。
配列を加算演算子で扱えるというのが何ともPHPらしいですが、その動きはあんまり加算っぽくないように思います。
- Older: PHPのforeachの不思議

