PHPの配列でjoinメソッドを使う方法を現役エンジニアが解説【初心者向け】
初心者向けにPHPの配列でjoinメソッドを使う方法について現役エンジニアが解説しています。joinメソッドとは、配列内の要素を文字列として連結するためのメソッドです。連結の際に使用する文字や文字列を指定することが出来、空白やその他の文字の場合についてサンプルコードで解説しています。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
監修してくれたメンター
井上 祐介
PHPで配列を結合する方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
PHPではさまざまな方法で配列を結合できますので、この記事では用途に合わせた使い分けについて解説しています。
目次
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
PHPの配列を結合するにはどうしたらいいですか?
配列を結合する方法はいろいろあるけど、array_mergeが使えるよ。
ただ連想配列でキーが同じだった場合に値が上書きされるよ。
連想配列?キー?上書き? なんだか難しそうですね・・・
聞いただけではイメージするのが難しいかもしれないね。
たとえば$sum[5]の「5」の数値が配列の添字、つまりキーだよ。
連想配列はこのキーが文字列の配列だね。
じゃあ、配列を結合する方法を実際のサンプルコードを使って説明するね。
お願いします!
※この解説記事では配列のキー(添字)が数値のものを添字配列といい、キーが文字列の連想配列と区別しています。PHPの配列については解説記事「PHPの配列の基本を現役エンジニアが解説【初心者向け】」を、連想配列については解説記事「PHPで連想配列を使う方法【初心者向け】」をご覧ください。
array_mergeで結合する方法
PHPで配列を結合するには、array_merge関数が使えます。
複数の配列をひとつに結合した配列を取得できます。
構文
結合された配列 = array_merge(配列1, 配列2);
配列1の後ろに配列2の要素が追加されて結合された配列が取得できます。
※引数に指定する配列の数は、ひとつでも3つ以上でも指定できます。
※結合された配列はarray_merge関数の戻り値で取得します。上記の構文だと配列1そのものが更新されるわけではありません。
配列のキーが同じ要素を結合すると?
配列が連想配列(キーが文字列の配列)かどうかで結果が異なります。
キーが数値の添字配列の場合は、同じキーがあっても添字がゼロから振りなおされ、要素が追加されていきます。
キーが文字列の連想配列の場合は、同じキーがあると新しい要素に上書きされて追加にはなりません。
添字配列を結合する
配列のキーが数値の添字配列をarray_merge関数で結合すると、すべての要素のキーがゼロから振りなおされて追加されます。
ソースコード
色の名前が入った2つの配列 $colors1と$colors2の要素をarray_mergeで結合し、$colorsに代入します。
$colors1と$colors2の配列はキーが数値のため、結合したときにキーが降り直されます。
<?php
$colors1 = array('赤', '緑', '青');
$colors2 = array('シアン', 'マゼンタ', '黄');
//配列を結合
$colors = array_merge($colors1, $colors2);
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors);
print_r('</pre>');
?>
※本来なら出力したいWebページ内で<html>タグなどを含める必要がありますが、今回はPHPのプログラムの解説が目的なので省略しています。基本的なPHPの書き方について詳しくは解説記事「基本的なPHPの書き方」をご覧ください。
表示結果
解説
$colors1 = array('赤', '緑', '青');
$colors1に3つの要素がある配列を代入しています。
配列 $colors1の中身は以下のように0から2のキーがあります。
Array
(
[0] => 赤
[1] => 緑
[2] => 青
)
※配列を作成するときに、値だけ指定すると自動的にゼロから始まる添字がついてキーが作成されます。配列の作成について詳しくは解説記事「PHPの配列の基本を現役エンジニアが解説【初心者向け】」をご覧ください。
$colors2 = array('シアン', 'マゼンタ', '黄');
$colors2にも3つの要素がある配列を代入しており、中身は以下の状態です。
Array
(
[0] => シアン
[1] => マゼンタ
[2] => 黄
)
配列のキー(添字)が$colors1と同じ0から2が使われています。
//配列を結合
$colors = array_merge($colors1, $colors2);
関数array_mergeで$colors1と配列 $colors2の要素を結合したものが、配列 $colorsに返されます。
配列 $colors1の後ろに$colors2の要素が追加されます。
$colors1も$colors2も配列のキーが数値なので、同じキーが存在していてもゼロから降り直されて追加されます。
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors);
print_r('</pre>');
配列 $colorsの中身をprint_rで出力しています。
配列を出力する前に<pre>タグを使っているのは、print_rで出力される改行をHTMLのソースコードだけでなく、ブラウザ上での出力でも改行させるためです。
<pre>タグを使わずにprint_rだけで出力すると、以下のように表示されます。
Array ( [0] => 赤 [1] => 緑 [2] => 青 [3] => シアン [4] => マゼンタ [5] => 黄 )
ブラウザ上で改行するには通常<br>タグなどを出力する必要がありますが、<pre>タグを使えば、改行文字をそのままブラウザの出力で改行させられます。
※ソースコード内での改行とブラウザでの改行は異なります。詳しくは解説記事「ブラウザで見やすくする!PHPで改行処理を行う方法【初心者向け】」をご覧ください。
※PHPの配列はそのままechoで出力できないのでimplode関数で文字列に変換するか、print_rやvar_dump関数で出力します。implode関数についてはこの記事にある見出し「implodeで配列を文字列として結合する」を、print_rやvar_dumpについては解説記事「PHPでデバッグログを出力する方法を現役エンジニアが解説【初心者向け】」をご覧ください。
連想配列を結合する
array_merge関数を使って連想配列(キーが文字列の配列)を結合する場合も、基本的にはキーが数値の場合と同じで要素が追加されて結合されます。
ただ、連想配列のキーが同じ要素がすでに存在する場合は、要素は追加されず値だけ上書きされます。
※連想配列とは配列の添字が文字列の配列です。連想配列について詳しくは解説記事「PHPで連想配列を使う方法【初心者向け】」をご覧ください。
ソースコード
色の名前が入った2つの配列 $colors1と$colors2の要素をarray_mergeで結合し、$colorsに代入します。
$colors1と$colors2の配列はキーが文字列である連想配列のため、キーが同じ場合は要素が追加されず値が上書きされます。
<?php
$colors1 = array(
'red' => '赤',
'green'=> '緑',
'blue' => '青',
);
$colors2 = array(
'cyan' => 'シアン',
'magenta' => 'マゼンタ',
'red' => 'あか',
);
//配列を結合
$colors = array_merge($colors1, $colors2);
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors);
print_r('</pre>');
?>
表示結果
解説
$colors1 = array(
'red' => '赤',
'green'=> '緑',
'blue' => '青',
);
$colors1に3つの要素がある配列を連想配列で代入しています。
配列 $colors1の中身は、連想配列なので以下のようにキーが文字列です。
Array
(
[red] => 赤
[green] => 緑
[blue] => 青
)
$colors2 = array(
'cyan' => 'シアン',
'magenta' => 'マゼンタ',
'red' => 'あか',
);
$colors2にも3つの要素がある連想配列を代入しており、中身は以下の状態です。
Array
(
[cyan] => シアン
[magenta] => マゼンタ
[red] => あか
)
キー「red」が$colors1と重複しています。
//配列を結合
$colors = array_merge($colors1, $colors2);
関数array_mergeで$colors1を$colors2の要素と結合したものが、配列 $colorsに返されます。
配列 $colors1の要素の後ろに$colors2の要素が追加されます。
「red」が$colors1のキーと重複しているので$colors2の「red」の要素は追加されず、すでに追加されている「red」の値を「赤」から「あか」に上書きします。
まとめ
PHPで複数の配列をarray_merge関数で結合でき、キーが数値の添字配列の要素はキーがゼロから振りなおされて追加されます。
array_merge関数を使ったとき連想配列のキーが重複している場合は、追加されず新しい要素の値が上書きされます。
array_merge_recursiveで配列を結合する
配列を結合させるにはarray_merge_recursive関数を使う方法もあります。
array_mergeと同じように配列の要素を結合しますが、同じ要素があっても上書きされず同じキーの中の配列として追加できます。
構文
結合された配列 = array_merge_recursive(配列1, 配列2);
※引数に指定する配列の数は、ひとつでも3つ以上でも指定できます。
※結合された配列はarray_merge_recursive関数の戻り値で取得します。上記の構文だと配列1そのものが更新されるわけではありません。
添字配列を結合する
array_merge_recursive関数でキーが数値の配列(添字配列)を結合した場合、array_mergeで結合した結果と同じです。
キーの数値がゼロから降り直されて、要素が追加されていきます。
連想配列を結合する
array_merge_recursive関数は連想配列でキーが重なったときに、値が上書きされず追加されるので便利です。
同じキーがあった場合、配列の中の配列に共通のキーを持つ要素として追加されます。
ソースコード
色の名前が入った2つの配列 $colors1と$colors2の要素をarray_merge_recursiveで結合し、$colorsに代入します。
$colors1と$colors2の配列に同じキーが存在している場合は、配列の中に配列が作成されて追加されます。
<?php
$colors1 = array(
'red' => '赤',
'green'=> array(
'yellow_green' => '黄緑',
'forest_green' => '深緑',
),
'blue' => '青',
);
$colors2 = array(
'red' => 'レッド',
'green'=> array(
'lime_green' => 'ライムグリーン',
'emerald' => 'エメラルド',
),
'magenta' => 'マゼンタ',
);
//配列を結合
$colors = array_merge_recursive($colors1, $colors2);
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors);
print_r('</pre>');
?>
表示結果
解説
$colors1 = array(
'red' => '赤',
'green'=> array(
'yellow_green' => '黄緑',
'forest_green' => '深緑',
),
'blue' => '青',
);
$colors1に3つの要素がある配列を連想配列で代入しています。
配列 $colors1の中身は、以下のようになっています。
Array
(
[red] => 赤
[green] => Array
(
[yellow_green] => 黄緑
[forest_green] => 深緑
)
[blue] => 青
)
キーが「green」の要素の値は2つの要素を含む配列になっています。
$colors2 = array(
'red' => 'レッド',
'green'=> array(
'lime_green' => 'ライムグリーン',
'emerald' => 'エメラルド',
),
'magenta' => 'マゼンタ',
);
$colors2に3つの要素がある配列を連想配列で代入しています。
配列 $colors2の中身は、以下のようになっています。
Array
(
[red] => レッド
[green] => Array
(
[lime_green] => ライムグリーン
[emerald] => エメラルド
)
[magenta] => マゼンタ
)
「red」のキーは$colors1と重複しています。
「green」のキーは$colors1にも存在し、2つの要素を含む配列になっています。
//配列を結合
$colors = array_merge_recursive($colors1, $colors2);
array_merge_recursive関数で$colors1を$colors2の要素と結合し、配列 $colorsに代入します。
キーが重複していれば配列の中の配列としてまとめられて追加されます。
まず、「red」のキーが$colors1と$colors2で重複しているので、「red」をキーとする要素として「赤」と「レッド」の値を持つ配列に追加されます。
「green」のキーは、もともと配列で作成されているので、同じ「green」のキーの配列内に要素が追加されます。
まとめ
array_merge_recursiveを使って配列を結合すると基本的にはarray_mergeと同じように結合されます。
要素のキーが重複している場合に、上書きされず配列の中の配列に要素がまとめられて追加されます。
[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは
演算子で配列を結合する
配列を結合する方法として +(プラス)演算子を使った方法があります。
+演算子による配列の結合では、キーの種類に関わりなくキーが重複していない要素だけ追加されます。
構文
結合された配列 = 配列1 + 配列2;
+演算子を使って配列を結合すると、2番目の配列(+演算子の右側の配列)でキーが重複している要素は無視されて上書きも追加もされません。
重複しないキーを結合させる場合に使用できます。
ソースコード
+演算子を使ってキーが重複していない配列の要素を結合します。
キーが数値の配列を結合して$colors_aに、連想配列を結合して$colors_bに代入します。
<?php
//添字配列(キーが数値)
$colors1 = array('赤', '緑', '青');
$colors2 = array('シアン', 'マゼンタ', 'イエロー', 'ブラック');
//配列を結合
$colors_a = $colors1 + $colors2;
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors_a);
print_r('</pre>');
//連想配列(キーが文字列)
$colors3 = array(
'white' => '白',
'black'=> '黒',
);
$colors4 = array(
'white' => 'ホワイト',
'gray' => 'グレー',
);
//配列を結合
$colors_b = $colors3 + $colors4;
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors_b);
print_r('</pre>');
?>
表示結果
解説
//添字配列(キーが数値)
$colors1 = array('赤', '緑', '青');
$colors2 = array('シアン', 'マゼンタ', 'イエロー', 'ブラック');
$colors1はキーが数値の配列を代入され、以下の内容になります。
Array
(
[0] => 赤
[1] => 緑
[2] => 青
)
続けて、$colors2も添字配列が代入され、以下の内容になります。
Array
(
[0] => シアン
[1] => マゼンタ
[2] => イエロー
[3] => ブラック
)
$colors2のキーの数値 0から2が$colors1のキーと重複しています。
//配列を結合
$colors_a = $colors1 + $colors2;
+演算子を使ってキーが重複していない要素を結合します。
最初の配列(+演算子の左側の配列)$colors1にあるすべての要素と、2番目の配列(+演算子の右側にある配列)$colors2にある最初の配列とキーが重複していない$colors2[3]の「ブラック」の要素が結合されます。
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors_a);
print_r('</pre>');
+演算子を使って結合した配列$colors_aを出力しています。
表示結果の$colors_aを出力しているのは以下の部分です。
Array
(
[0] => 赤
[1] => 緑
[2] => 青
[3] => ブラック
)
+演算子による配列の結合ではキーが重複しない要素だけ結合されるので、$colors1のすべての要素(キーが0から2の要素)と$colors1とキーが重複していない$colors2の要素(キーが3の「ブラック」の要素)が追加されています。
//連想配列(キーが文字列)
$colors3 = array(
'white' => '白',
'black'=> '黒',
);
$colors4 = array(
'white' => 'ホワイト',
'gray' => 'グレー',
);
続いて連想配列を+演算子で結合する場合です。
連想配列でもキーが重複していない要素が追加されます。
連想配列 $colors3の内容は以下の通りです。
Array
(
[white] => 白
[black] => 黒
)
連想配列 $colors4の内容は以下の通りです。
Array
(
[white] => ホワイト
[gray] => グレー
)
$colors3のキーが「white」の要素が重複しています。
//配列を結合
$colors_b = $colors3 + $colors4;
+演算子を使ってキーが重複していない要素を結合します。
最初の配列(+演算子の左側の配列)$colors3にあるすべての要素と、2番目の配列(+演算子の右側にある配列)$colors4にある最初の配列とキーが重複していない$colors4[‘gray’]の「グレー」の要素が結合されます。
//結合した配列を出力(preタグで改行させる)
print_r('<pre>');
print_r($colors_b);
print_r('</pre>');
+演算子を使って結合した配列$colors_bを出力しています。
表示結果の$colors_bを出力しているのは以下の部分です。
Array
(
[white] => 白
[black] => 黒
[gray] => グレー
)
+演算子による配列の結合ではキーが重複しない要素だけ結合されるので、$colors3のすべての要素(キーが「white」と「black」の要素)と$colors3とキーが重複していない$colors4の要素(キーが「gray」の要素)が追加されています。
まとめ
+演算子で配列を結合すると配列のキーが数値でも文字列の連想配列でも、キーが重複していない要素が結合されます。
implodeで配列を文字列として結合する
配列を文字列として結合するにはimplode関数を使います。
配列の要素を文字列にして結合できるだけでなく、要素と要素の文字列を指定した連結文字でつなげられます。
ただ、指定できる配列はひとつだけで、配列のすべての要素が文字列として結合されます。
構文
要素が結合された文字列 = implode(連結文字, 配列);
第一引数の連結文字は、配列を文字列に変換してつなげた要素と要素の間に入れる文字列です。
連結文字に「,」カンマを指定すれば、配列からカンマ区切りの文字列が簡単に作成できます。
第二引数の配列は文字列に変換したい配列ひとつを指定します。
※連結文字は省略できます。連結文字を省略すると要素の文字列を隙間なくつなげます。
join関数とは
join関数とはimplode関数の別名(エイリアス)です。
implode関数の代わりの関数名として使えます。
たとえば、「join(‘,’,$colors)」は「implode(‘,’,$colors)」と同じです。
ソースコード
配列の要素をimplode関数で「と」という文字でつないだ文字列にします。
<?php
$colors = array('赤', '緑', '青');
//配列を文字列として結合
$color_str = implode('と', $colors);
//文字列を出力
echo $color_str;
?>
表示結果
解説
//配列を文字列として結合
$color_str = implode('と', $colors);
implode関数で配列 $colorsのすべての要素を文字列「‘と’」で連結した文字列にします。
配列 $colorsの要素は「’赤’」「’緑’」「’青’」なので、各要素の文字列を「‘と’」でつなぐと、文字列「赤と緑と青」になります。
まとめ
implode関数を使うと、ひとつの配列を文字列に変換して結合できます。
implode関数の第一引数で連結文字を指定して、指定した文字列で各要素をつなげられます。
join関数はimplode関数の別名です。
まとめ
PHPで配列を結合するにはarray_merge関数を使って要素を追加し、連想配列でキーが同じ場合は値が上書きされます。
array_merge_recursive関数で配列を結合すると、同じキーがある連想配列を結合したときに配列の中に配列を追加して要素が結合されます。
+(プラス)演算子を使って配列を結合すると、キーが重複している要素以外を結合します。
文字列として配列ひとつの要素を結合するにはimplode関数を使います。
PHPの配列を結合するいろんな方法があるんですね。
そうだね。配列のキーが同じ場合の結果が違うから気を付けてね。
分かりました。ありがとうございます!
PHPを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!