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

PHP

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

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

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

PR

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の値で上書きされました。
他の値は、重複しないので、そのまま結合されたことが確認できます。

PR

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関数を使っていきましょう。

コメント

Ads Blocker Image Powered by Code Help Pro

広告ブロッカーが検出されました。

ブラウザの拡張機能を使用して広告ブロックをしていることが確認できました。 ブラウザの広告ブロッカー機能を無効にしていただくか、codelikes.comをホワイトリストに追加し、更新をクリックしてください。 お手数ですが、よろしくお願いします🙇‍♂️
タイトルとURLをコピーしました