読者です 読者をやめる 読者になる 読者になる

カメ飼ってる新米エンジニアの覚書き

とにかくカメがかわいい

配列の後に配列を追加するのはarray_mergeでよかった(PHP)

PHPの配列マージには結構種類があって

  1. +で連結するとか
  2. arrarray_mergeとか
  3. array_merge_recursiveとか

キーが同じ配列同士の2つの配列をマージしたい場合、
$array_1 +$array_2だと、同じキーであれば$array_1に食われてしまう。  

+した場合

$array_1 = array(0=>'value0', 1=>'value1', 2=>'value2');
$array_2 = array(0=>'value3', 1=>'value4', 2=>'value5');

var_dump($array_1 + $array_2);
/* 結果
array(3) {
  [0]=>
  string(6) "value0"
  [1]=>
  string(6) "value1"
  [2]=>
  string(6) "value2"
}
*/

array_mergearray_merge_recursiveを使う

var_dump(array_merge($array_1, $array_2));
var_dump(array_merge_recursive($array_1, $array_2));
/* 結果
array(6) {
  [0]=>
  string(6) "value0"
  [1]=>
  string(6) "value1"
  [2]=>
  string(6) "value2"
  [3]=>
  string(6) "value3"
  [4]=>
  string(6) "value4"
  [5]=>
  string(6) "value5"
}
array(6) {
  [0]=>
  string(6) "value0"
  [1]=>
  string(6) "value1"
  [2]=>
  string(6) "value2"
  [3]=>
  string(6) "value3"
  [4]=>
  string(6) "value4"
  [5]=>
  string(6) "value5"
}

# array_mergearray_merge_recursiveのちがい

キーを文字列に変えてみた場合が顕著

$array_1 = array('a'=>'value0', 'b'=>'value1', 'c'=>'value2');
$array_2 = array('a'=>'value3', 'b'=>'value4', 'c'=>'value5');

var_dump(array_merge($array_1, $array_2));
/*結果
array(3) {
  ["a"]=>
  string(6) "value3"
  ["b"]=>
  string(6) "value4"
  ["c"]=>
  string(6) "value5"
}
*/

var_dump(array_merge_recursive($array_1, $array_2));
/*結果
array(3) {
  ["a"]=>
  array(2) {
    [0]=>
    string(6) "value0"
    [1]=>
    string(6) "value3"
  }
  ["b"]=>
  array(2) {
    [0]=>
    string(6) "value1"
    [1]=>
    string(6) "value4"
  }
  ["c"]=>
  array(2) {
    [0]=>
    string(6) "value2"
    [1]=>
    string(6) "value5"
  }
}
*/

var_dump($array_1 + $array_2);
/*結果
array(3) {
  ["a"]=>
  string(6) "value0"
  ["b"]=>
  string(6) "value1"
  ["c"]=>
  string(6) "value2"
}
*/

www.tam-tam.co.jp

PHP: array_merge - Manual