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

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

トラックバックURL:

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らしいですが、その動きはあんまり加算っぽくないように思います。

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

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

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

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

その他

Feed配信

RSSリーダー登録

myyahooへ追加
Googleへ追加
はてなRSSへ追加
Livedoorリーダーへ追加
goo RSSリーダーへ追加

携帯サイト

携帯サイトへのQRコード
メタ情報

Page Top