PHPの配列・連想配列の結合
配列・連想配列の結合には array_merge() , array_merge_recursive() , $arr1+$arr2 の3つの方法があります。こういうのはクセを知るほうが早いです。ちなみに recursive とは「再帰的」の意味です。
通常の配列の結合
配列の定義
$arr1 = array("A","B","C","D");
$arr2 = array("C","D","E","F");
array_merge
array_merge($arr1, $arr2)
$arr3 = array_merge($arr1, $arr2) ;
print_r($arr3);
//結果
Array
(
[0] => A
[1] => B
[2] => C
[3] => D
[4] => C
[5] => D
[6] => E
[7] => F
)
array_merge($arr2, $arr1)
$arr3 = array_merge($arr2, $arr1) ;
print_r($arr3);
//結果
Array
(
[0] => A
[1] => B
[2] => C
[3] => D
[4] => C
[5] => D
[6] => E
[7] => F
)
array_merge_recursive
array_merge_recursive($arr1, $arr2) ;
$arr3 = array_merge_recursive($arr1, $arr2) ;
print_r($arr3);
//結果
Array
(
[0] => A
[1] => B
[2] => C
[3] => D
[4] => C
[5] => D
[6] => E
[7] => F
)
A+B
$arr3 = $arr1 + $arr2 ;
print_r($arr3) ;
//結果
Array
(
[0] => A
[1] => B
[2] => C
[3] => D
)
$arr3 = $arr2 + $arr1 ;
print_r($arr3) ;
//結果
Array
(
[0] => C
[1] => D
[2] => E
[3] => F
)
A+B *配列の中身を数値で実験
ちなみに、数値の配列同士の足し算をしてみると・・・やはり配列の結合というか上書きでした。Pythonのnumpy みたいに 配列の足し算になれると、ちょっと勘違いしやすいです。
$arr1 = array(1,2,3,4);
$arr2 = array(10,20,30,40);
$arr3 = $arr2 + $arr1 ;
print_r($arr3) ;
//結果
Array
(
[0] => 10
[1] => 20
[2] => 30
[3] => 40
)
通常の配列(キーが数値)の場合は挙動はどれもかわりません。配列をどんどん後ろにくっつけていくイメージです。しかし、連想配列になると、関数の違・引数の順番によっても結果が異なります。
連想配列の結合
以下の $arr1, $arr2 の連想配列を実験データに使います。
実験データーの中身
print_r($arr1);
//$arr1 のデータの中身
Array
(
[a] => A
[b] => B
[c] => C
[d] => D
)
print_r($arr2);
//$arr2 のデータの中身
Array
(
[c] => CC
[d] => DD
[e] => EE
[f] => FF
)
array_merge
$arr3 = array_merge($arr1, $arr2) ;
print_r($arr3);
//結果
Array
(
[a] => A
[b] => B
[c] => CC
[d] => DD
[e] => EE
[f] => FF
)
$arr3 = array_merge($arr2, $arr1) ;
print_r($arr3);
//結果
Array
(
[c] => C
[d] => D
[e] => EE
[f] => FF
[a] => A
[b] => B
)
array_merge_recursive
$arr3 = array_merge_recursive($arr1, $arr2) ;
print_r($arr3) ;
//結果
Array
(
[a] => A
[b] => B
[c] => Array
(
[0] => C
[1] => CC
)
[d] => Array
(
[0] => D
[1] => DD
)
[e] => EE
[f] => FF
)
$arr3 = array_merge_recursive($arr2, $arr1) ;
print_r($arr3) ;
//結果
Array
(
[c] => Array
(
[0] => CC
[1] => C
)
[d] => Array
(
[0] => DD
[1] => D
)
[e] => EE
[f] => FF
[a] => A
[b] => B
)
A+B
キーに重複があればスルーするイメージ
個人的にはこれを良く使うかな・・・
$arr3 = $arr1 + $arr2 ;
print_r($arr3) ;
// 結果
Array
(
[a] => A
[b] => B
[c] => C
[d] => D
[e] => EE
[f] => FF
)
$arr3 = $arr2 + $arr1 ;
print_r($arr3) ;
// 結果
Array
(
[c] => CC
[d] => DD
[e] => EE
[f] => FF
[a] => A
[b] => B
)
引数
以上の説明では array_merge() も array_merge_recursive() も2つの配列しか渡してませんが、さらに多くの配列を渡すこともできます。
$arr5 = array_merge($arr1, $arr2, $arr3, $arr4) ;