PHPでは、さまざまな方法で配列を結合することができます。
この記事では、
・array_merge関数で配列に配列を追加する方法
・implode関数で配列に文字列を結合する方法
という基本的な内容から、
・プラス演算子で配列を結合する方法と注意点
・array_combine関数でキーと値の配列から連想配列を作成する方法
・速度面の検証
などの応用的な使い方に関しても解説していきます。
今回はそんな配列の結合方法について、わかりやすく解説します!
配列を結合する
array_mergeとは
array_merge関数を使用すると、配列の後ろに配列を追加(結合)することができます。
書き方:
array array_marge(最初の配列名, 追加する配列1, (, 追加する配列2, …)
引数:
第一引数には最初の配列を指定します。
第一引数以降は追加していく配列を1つ、または複数指定します。
返り値:
結合した結果の配列を返します。
array_mergeの使い方
ここではarray_merge関数の使い方を見ていきましょう!
以下に配列を結合する簡単なサンプルプログラムを紹介します。
サンプルプログラム1
$fruits1 = ['apple', 'orange', 'melon', 'banana', 'pineapple']; $fruits2 = ['strawberry', 'cherry', 'watermelon']; //配列を結合する $fruits_merge = array_merge($fruits1, $fruits2); print_r($fruits_merge);
実行結果:
Array ( [0] => apple [1] => orange [2] => melon [3] => banana [4] => pineapple [5] => strawberry [6] => cherry [7] => watermelon )
サンプルプログラムでは配列$fruits1と$fruits2を作成し、array_merge関数を使用して$fruits1の後ろに$fruits2を結合しています。
以下のように最初の配列と追加する配列に同じキーがある場合は、結合時に追加する配列のキーに上書きされてしまいますので注意しましょう。
サンプルプログラム2
$array1 = ['val1' => 100, 1, 2]; $array2 = array(3, 4, 'val1' => 200, 'val2' => 500, 5); $result = array_merge($array1, $array2); print_r($result);
実行結果:
Array ( [val1] => 200 [0] => 1 [1] => 2 [2] => 3 [3] => 4 [val2] => 500 [4] => 5 )
array_merge関数については、以下の記事でも詳しく解説していますので、ぜひ参考にしてくださいね!
配列を文字列で結合する
implodeとは
implode関数は、配列の値を文字列で結合するときに使用します。
書き方1:
string implode('結合する文字列', 配列名)
書き方2:
string implode(配列名)
引数:
結合する文字列は配列の要素を指定した文字列で連結したいときに使用します。
デフォルトは空文字列となります。
implode関数に関しては、引数をどちらの順番でも指定することができます。(歴史的な理由とのことです)
しかし、混乱を避けるためにマニュアルやドキュメントに記載された順番で、使用するのが望ましいと言えます。
返り値:
配列の要素間に結合する文字列ではさんで1つの文字列にした値を返します。
implodeの使い方
ここではimplode関数の使い方を見ていきましょう!
サンプルプログラム1:
$fruits = ['apple', 'orange', 'melon']; //implodeを使用して配列の要素に'/'を結合する $slash = implode('/', $fruits); echo $slash;
実行結果:
apple/orange/melon
サンプルでは、結合する文字列に’/’(スラッシュ)を指定しています。
実行結果のとおり、配列の要素間に’/’が結合されているのがわかりますね!
以下のようにHTMLのタグで結合することも可能です。
サンプルプログラム2:
$array = ['リスト1', 'リスト2', 'リスト3']; echo "<ul><li>" . implode("</li><li>", $array) . "</li></ul>";
これを実行すると、ブラウザで以下のように表示されます。
プラス(+)演算子で配列を結合する
プラス(+)演算子を使用することでも配列を結合することができます。
書き方:
$array = $配列1 + $配列2;
サンプルプログラム
$array1 = ['val1' => 100, 'val2' => 200, 'val3' => 300]; $array2 = ['val4' => 400, 'val5' => 500]; //プラス演算子で配列同士を結合する $result = $array1 + $array2; print_r($result);
実行結果:
Array ( [val1] => 100 [val2] => 200 [val3] => 300 [val4] => 400 [val5] => 500 )
プラス演算子での注意点
プラス演算子(+)を使用すれば、簡単に配列を結合することができますが、注意点があります。
プラス演算子での結合は、単純に配列1の後ろに配列2が結合されるのではなく、配列の要素キーが重複していた場合は、先の配列の要素番号が優先されます。
例えば、以下のようにプラス演算子で配列を結合しようとしても、fruits2の値は廃棄されてしまいます。
サンプルプログラム
$fruits1 = [1 => 'apple', 2 => 'orange', 3 => 'melon']; $fruits2 = [1 => 'banana', 2 => 'pineapple']; //プラス演算子で配列同士を結合する $fruits_merge = $fruits1 + $fruits2; print_r($fruits_merge);
実行結果:
Array ( [1] => apple [2] => orange [3] => melon )
実行結果のとおり、要素キーが重複しているため、配列fruits2の値は反映されていません。
そのため、プラス演算子で配列を結合する場合は、連想配列で要素キーが重複していないか、把握しておく必要があります。
2つの配列から連想配列を生成する
array_combineとは
array_combine関数を使用すれば、指定した2つの配列をキーと値の配列として、結合することができます。
書き方:
array_combine($キー配列、$値配列)
引数:
第一引数にはキーとして使用する配列を指定します。無効な値を指定した倍は、文字列に変換されます。
第二引数には値として使用する配列を指定します。
返り値:
キー配列と値配列を結合した配列を返します。互いに要素数が一致しない場合はFALSEを返します。
array_combineの使い方
ここではarray_combine関数を使用して、2つの配列を結合するサンプルプログラムを紹介します。
サンプルプログラム
$fruits = ['apple', 'orange', 'melon']; $value = ["100円", "250円", "300円"]; //array_combineを使用してキーと値を結合する $fruits_value = array_combine($fruits, $value); print_r($fruits_value);
実行結果:
Array ( [apple] => 100円 [orange] => 250円 [melon] => 300円 )
サンプルでは商品名をキーとする配列と値段を値とする配列を作成し、array_combine関数を使用して結合しています。
実行結果のとおり、結合した配列は連想配列として、キーと値が紐付けされていることがわかります。
速度面
配列の操作は、プログラムのさまざまな用途で使われる非常に重要な処理と言えます。
しかし、よく使うからこそ処理パフォーマンスも気になるところです。
ここでは、よく似た配列の処理として、array_marge関数と[](角括弧)で、それぞれ配列に値を追加したときの処理パフォーマンスを比較してみました。
比較にはmicrotime関数を使用し、それぞれループの中で10000回配列に値を追加しています。
<?php /* array_merge */ $fruits1 = ['apple', 'orange', 'melon']; $fruits2 = ['banana', 'pineapple']; $marge_start = microtime(true); for ($i = 0 ; $i < 10000 ; $i++){ $fruits1 = array_merge($fruits1, $fruits2); } $marge_end = microtime(true) - $marge_start; echo 'array_merge : '.$marge_end .'秒'; echo '<br>'; /* 角括弧 */ $fruits = ['apple', 'orange', 'melon']; $brackets_start = microtime(true); for ($i = 0 ; $i < 10000 ; $i++){ $fruits[] = 'banana'; $fruits[] = 'pineapple'; } $brackets_end = microtime(true) - $brackets_start; echo '角括弧 : '.$brackets_end .'秒'; ?>
実行結果 array_merge : 2.13677287102秒 角括弧 : 0.00154280662537秒
実行結果のとおり、角括弧を使用したほうが圧倒的に処理が早いことが分かりました。
とくに配列の要素数が膨大になると、その差は顕著です。
array関数についてもっと詳しく知りたい方へ
配列を操作するさまざまな関数の使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
・array_sum関数の使い方
・array_unique関数の使い方
・array_values関数の使い方
・array_keys関数の使い方
・array_filter関数の使い方
・array_map関数の使い方
・array_push関数の使い方
・array_key_exists関数の使い方
・array_pad関数の使い方
・implode関数の使い方
・配列の削除方法
・配列の検索方法
・よく使用する配列操作
まとめ
ここでは配列を結合する方法について、
・array_merge関数で配列に配列を追加する方法
・implode関数で配列に文字列を結合する方法
・プラス演算子で配列を結合する方法と注意点
・array_combine関数でキーと値の配列から連想配列を作成する方法
・速度面の検証
などのさまざまな結合方法について解説しました。
配列の結合などの配列を扱った処理は、実際の開発でもよく使用しますので、この機会にぜひ覚えておきましょう。
もし、配列を結合する方法を忘れてしまったら、この記事を思い出してくださいね!