【PHP入門】配列を結合するさまざまな方法まとめ!

image
書いた人 ヤマシタ

こんにちは!フリーエンジニアのヤマシタです。

PHPでは、さまざまな方法で配列を結合することができます。

この記事では、

・array_merge関数で配列に配列を追加する方法
・implode関数で配列に文字列を結合する方法

という基本的な内容から、

・プラス演算子で配列を結合する方法と注意点
・array_combine関数でキーと値の配列から連想配列を作成する方法
・速度面の検証

などの応用的な使い方に関しても解説していきます。

今回はそんな配列の結合方法について、わかりやすく解説します!

配列を結合する

array_mergeとは

array_merge関数を使用すると、配列の後ろに配列を追加(結合)することができます。

書き方:

引数:
第一引数には最初の配列を指定します。
第一引数以降は追加していく配列を1つ、または複数指定します。

返り値:
結合した結果の配列を返します。

array_mergeの使い方

ここではarray_merge関数の使い方を見ていきましょう!

以下に配列を結合する簡単なサンプルプログラムを紹介します。

サンプルプログラム1

実行結果:

サンプルプログラムでは配列$fruits1と$fruits2を作成し、array_merge関数を使用して$fruits1の後ろに$fruits2を結合しています。

以下のように最初の配列と追加する配列に同じキーがある場合は、結合時に追加する配列のキーに上書きされてしまいますので注意しましょう。

サンプルプログラム2

実行結果:

array_merge関数については、以下の記事でも詳しく解説していますので、ぜひ参考にしてくださいね!

配列を文字列で結合する

implodeとは

implode関数は、配列の値を文字列で結合するときに使用します。

書き方1:

書き方2:

引数:
結合する文字列は配列の要素を指定した文字列で連結したいときに使用します。
デフォルトは空文字列となります。

implode関数に関しては、引数をどちらの順番でも指定することができます。(歴史的な理由とのことです)

しかし、混乱を避けるためにマニュアルやドキュメントに記載された順番で、使用するのが望ましいと言えます。

返り値:
配列の要素間に結合する文字列ではさんで1つの文字列にした値を返します。

implodeの使い方

ここではimplode関数の使い方を見ていきましょう!

サンプルプログラム1:

実行結果:

サンプルでは、結合する文字列に’/’(スラッシュ)を指定しています。

実行結果のとおり、配列の要素間に’/’が結合されているのがわかりますね!

以下のようにHTMLのタグで結合することも可能です。

サンプルプログラム2:

これを実行すると、ブラウザで以下のように表示されます。

スクリーンショット 2017-09-03 8.49.25

プラス(+)演算子で配列を結合する

プラス(+)演算子を使用することでも配列を結合することができます。

書き方:

サンプルプログラム

実行結果:

プラス演算子での注意点

プラス演算子(+)を使用すれば、簡単に配列を結合することができますが、注意点があります。

プラス演算子での結合は、単純に配列1の後ろに配列2が結合されるのではなく、配列の要素キーが重複していた場合は、先の配列の要素番号が優先されます。

例えば、以下のようにプラス演算子で配列を結合しようとしても、fruits2の値は廃棄されてしまいます。

サンプルプログラム

実行結果:

実行結果のとおり、要素キーが重複しているため、配列fruits2の値は反映されていません。

そのため、プラス演算子で配列を結合する場合は、連想配列で要素キーが重複していないか、把握しておく必要があります。

2つの配列から連想配列を生成する

array_combineとは

array_combine関数を使用すれば、指定した2つの配列をキーと値の配列として、結合することができます。

書き方:

引数:
第一引数にはキーとして使用する配列を指定します。無効な値を指定した倍は、文字列に変換されます。
第二引数には値として使用する配列を指定します。

返り値:
キー配列と値配列を結合した配列を返します。互いに要素数が一致しない場合はFALSEを返します。

array_combineの使い方

ここではarray_combine関数を使用して、2つの配列を結合するサンプルプログラムを紹介します。

サンプルプログラム

実行結果:

サンプルでは商品名をキーとする配列と値段を値とする配列を作成し、array_combine関数を使用して結合しています。

実行結果のとおり、結合した配列は連想配列として、キーと値が紐付けされていることがわかります。

速度面

配列の操作は、プログラムのさまざまな用途で使われる非常に重要な処理と言えます。

しかし、よく使うからこそ処理パフォーマンスも気になるところです。

ここでは、よく似た配列の処理として、array_marge関数と[](角括弧)で、それぞれ配列に値を追加したときの処理パフォーマンスを比較してみました。

比較にはmicrotime関数を使用し、それぞれループの中で10000回配列に値を追加しています。

実行結果のとおり、角括弧を使用したほうが圧倒的に処理が早いことが分かりました。

とくに配列の要素数が膨大になると、その差は顕著です。

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関数でキーと値の配列から連想配列を作成する方法
・速度面の検証

などのさまざまな結合方法について解説しました。

配列の結合などの配列を扱った処理は、実際の開発でもよく使用しますので、この機会にぜひ覚えておきましょう。

もし、配列を結合する方法を忘れてしまったら、この記事を思い出してくださいね!


33歳、未経験だった僕がフリーエンジニアになれた理由
現在フリーでWEBエンジニアをやられている濱口直行さん。33歳で、プログラミングを学び始め、約半年という短い期間で独立までされた学習ログを余すことなくインタビューさせていただきました。

プログラミングを学習中の方はもちろん、独立をお考えの方まで幅広く活用できる記事になっています。この機会に是非活用していただければと思います。


自分にプログラミングなんて・・・と思っていませんか?

今後10年間で今ある職業の『77%』はなくなると言われています。

人工知能や機械学習を筆頭にVR、AR、ドローンなどの最先端技術の発達はこれからのあなたの働き方に間違いなく影響を与えるでしょう。

将来を見据えてプログラミングができるようになってエンジニアになりたい、自分だけにしかできないクリエイティブな仕事がしたい、、、とお考えの方も少なくないでしょう。

と、同時に「難しそう、、自分にはできないだろう、、、」と諦めている方も多いのではないでしょうか。

弊社マンツーマンレッスンは、お一人お一人に専属のインストラクターがつくので、通常のスクールでは難しい、オリジナルアプリ開発や、フリーランスとしての仕事獲得まで支援しています。

まずは『無料体験レッスン』で弊社コンサルタントと一緒にあなた専用の学習カリキュラムを考えてみてはいかがでしょうか?

詳しくは下の画像をクリックしてください。

cta_mtm2

学習者インタビュー

23歳、早稲田中退生が3ヶ月でフリーランスエンジニアになるまで
32歳ベンチャー企業元役員が起業してプログラミングを学んだ話
元ディスクユニオン店員が33歳からプログラミングを学びエンジニアになるまで
ヨガスタジオのマネージャーだった私が3ヶ月でWeb制作をマスターするためにした”たった1つ”のこと
Uターン女子がRubyを学んで理想のライフスタイルを手に入れた話
新卒、文系出身エンジニアが語る、経験0からプログラミングができるようになった理由

プログラミング学習者必見

専属講師に質問し放題、レッスンし放題!最短1ヶ月でフリーランスエンジニア
プログラミング学習カリキュラム無料公開中
Ruby学習カリキュラム無料公開中
Python学習カリキュラム無料公開中
 1記事最大10,000円!テック系ライターさん大大大募集!!!
LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

ヤマシタ

フリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、今まで200本以上の執筆経験があります