PHPで配列を結合(マージ)する方法!(array_merge)

PHP

PHPで配列を結合する方法について書いています。
PHPで作成した2つ以上の配列を結合する場合には、下記の関数を使います。

・array_merge関数を使う
・array_merge_recursive関数を使う

記載しているサンプルコードはPHPのバージョン8.1.8で、動作検証しています。

array_merge関数で結合する

array_merge関数を使うことで、2つ以上の配列を結合することができます。
公式のドキュメントはこちらにあります。
例えば、下記のように使います。

<?php
$drinks1 = ['wine', 'milk', 'cola'];
$drinks2 = ['beer', 'water'];

$drinks = array_merge($drinks1, $drinks2);
print_r($drinks);

$drinks1変数に、3つの要素を入れて配列を作っています。
その次の行でも、$drinks2変数に2つの要素を入れて、配列を作っています。

その次の処理で、array_merge関数を使っています。
array_merge関数に渡す引数は、結合したい配列になります。

今回のコードだと、$drinks1配列と$drinks2配列を、array_merge関数で結合しています。
array_merge関数の返り値は結合した配列です。

$drinks変数に結合された配列が代入されます。
print_r関数で出力すると、下記のように全ての値が結合されたことが確認できました。

Array
(
    [0] => wine
    [1] => milk
    [2] => cola
    [3] => beer
    [4] => water
)

複数の配列を結合したいとき

array_merge関数の引数は可変引数なので、下記のように複数の配列を指定することが可能です。

<?php
$drinks1 = ['wine'];
$drinks2 = ['beer', 'milk'];
$drinks3 = ['cola', 'water'];
$drinks4 = ['coffee'];

$drinks = array_merge($drinks1, $drinks2, $drinks3, $drinks4);
print_r($drinks);

$drinks1から$drinks4までの、それぞれの配列を作成しました。

次にarray_merge関数を使って、複数の配列を引数に指定しています。
このように複数の配列を引数に指定して、一括して結合することが可能です。

上記のコードの結果をprint_r関数で確認すると、下記のように出力されました。

Array
(
    [0] => wine
    [1] => beer
    [2] => milk
    [3] => cola
    [4] => water
    [5] => coffee
)

連想配列のとき

連想配列をarray_merge関数で結合します。
そうすると、キー名が同じだった場合は、後の配列の値が上書きされます。

<?php
$fruits1 = ['red' => 'apple', 'yellow' => 'banana'];
$fruits2 = ['red' => 'cherry', 'green' => 'melon'];

$fruits = array_merge($fruits1, $fruits2);
print_r($fruits);

$fruits1変数に、2つの要素で連想配列を作成しました。
$fruits2変数にも同じように、連想配列を作成しました。

2つの連想配列をarray_merge関数で結合して、$fruits変数で受け取りました。
そうすると、連想配列が結合されますが、同じキーの場合は値が上書きされます。

$fruits変数で受け取って、print_r関数で出力すると、下記のようになりました。

Array
(
    [red] => cherry
    [yellow] => banana
    [green] => melon
)

連想配列のキー「’red’」は、どちらの配列にもあるので、後の連想配列の$fruits2の値で上書きされました。
他の値は、重複しないので、そのまま結合されたことが確認できます。

array_merge_recursive関数で結合する

array_merge_recursive関数を使うと、連想配列の場合に、先ほどのように値が上書きされることなく結合されます。
キーが同じ内容だった場合は、キーはそのままで、値が配列として追加されます。
公式のドキュメントはこちらにあります。

<?php
$fruits1 = ['red' => 'apple', 'yellow' => 'banana'];
$fruits2 = ['red' => 'cherry', 'green' => 'melon'];

$fruits = array_merge_recursive($fruits1, $fruits2);
print_r($fruits);

先ほどのプログラムのarray_merge関数をarray_merge_recursive関数に変えました。

$fruits1と$fruits2を結合しています。
array_merge_recursive関数なので、同じキーの値は上書きされません。

print_r関数で確認すると、下記のように上書きされずに出力されました。

Array
(
    [red] => Array
        (
            [0] => apple
            [1] => cherry
        )

    [yellow] => banana
    [green] => melon
)

おわりに

今回はPHPで配列の結合について確認しました。
配列を結合する場合には、array_merge関数を使うことで、返り値として結合した配列が返ってきました。
連想配列を結合するときに、重複するキーで値を上書きしたくない場合にはarray_merge_recursive関数を使っていきましょう。

コメント

タイトルとURLをコピーしました