twitter facebook

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

$arr1 + $arr2
$arr3 = $arr1 + $arr2 ;
print_r($arr3) ;
//結果
Array
(
    [0] => A
    [1] => B
    [2] => C
    [3] => D
)
$arr2 + $arr1
$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
)
$arr2, $arr1 に順番入れ替え。
$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
)
$arr2, $arr1 に順番入れ替え。
$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
)
B+A にすると
$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) ;
AUTHOR
@wasabi
最終更新日 2018/09/18
FAVORITE good stock
LINK TAG
記法を見る