PHPで配列を結合する方法について書いています。
PHPで作成した2つ以上の配列を結合する場合には、下記の関数を使います。
・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関数を使っていきましょう。
コメント