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