今回はPHPのjoin関数について解説していきます。
join関数はPHPの基礎となる部分ですが、初心者の方には非常に難しい部分だと思います。
しかし、PHPを扱うエンジニア、プログラマーになるには避けては通れない道ですので、ぜひ当サイトで少しでも理解を深めていってください。
目次
join関数とは
まずはjoin関数について解説していきます。
join関数とは配列の要素を結合して文字列にするための関数です。
また、各文字列の間に挟む連結文字を指定することもできます。
例えばCSVを出力する際に、「,」を連結文字として複数の文字列を連結する際に利用することになります。
join関数のサンプルコード
次に実際にjoin関数を使用したコードを見てみましょう。
1 2 3 4 5 6 |
1.<?php 2.$color = [<span class="orange">'red'</span>,<span class="orange">'blue'</span>,<span class="orange">'green'</span>]; 3.$result = join(',',$color); 4. 5.echo $result; 6.?> |
実行結果
1 |
1.red,blue,green |
実行結果を見るとこのように配列の要素がカンマ区切りで文字列になっています。
join関数の第一引数には要素の間にはさみたい区切り文字を指定します。
今回はカンマを区切り文字にしているので各要素である「red」や「blue」の間に「、」が追加され結合しています。
join関数とimplode関数の違いは?joinの方が速い?
PHPのjoin関数について、web上で検索すると「implode関数」という単語を目にすると思います。
この「implode関数」というのはいったいjoin関数とどんな関係があるのでしょうか?
実はプログラミングの関数の中には今回解説しているjoin関数と全く同じ機能を持った関数があります。
それが「implode関数」。この関数はjoin関数と全く同じ動作をするもので、使い勝手もjoin関数と何も変わりません。
では、なぜ動作が同じなのに名前が異なるのか解説すると、join関数はimplode関数のエイリアスだからです。
このエイリアスというものを簡単に説明すると、あだ名のようなものです。コマンドや機能に付ける別名です。
つまり、joinというのはimplodeの別名であって、中身は全く同じなのです。
巷では、joinの方が速く動作するという噂が出回っていますが、理論上そんなはずがないので気のせいでしょう。
(joinのほうがキーボードの位置的に速く打つことが出来るので、効率がいいのはjoinの方だが)
join関数は引数の順番が違っても動く?
通常の関数は、引数の順番ごとに決まった値を渡していきます。
しかし、join関数は,特殊なので、因数の順番を逆にしても動作します。
PHPの公式マニュアルによると、歴史的な理由によるものだそうです。
では、実際に引数を逆にしたサンプルコードを見てみましょう。
1 2 3 4 5 |
1.<?php 2.$color = [<span class="orange">'red'</span>,<span class="orange">'blue'</span>,<span class="orange">'green'</span>]; 3.$result = join($color,<span class="orange">','</span>); 4.echo $result 5.?> |
実行結果
1 |
1.red,blue,green |
このように引数を逆にしても、きちんと同じ結果が出ましたね。
join関数は二次元配列を指定できるの?
次に、join関数に二次元配列を指定した場合はどうなるのか試してみましょう。
サンプルコード
1 2 3 4 5 |
1.<?php 2.$color = [[<span class="orange">'brack_red'</span>,<span class="orange">'yellow_red'</span>],<span class="orange">'blue'</span>,<span class="orange">'green'</span>]; 3.$result = join(<span class="orange">','</span>,$color); 4.echo $result; 5.?> |
実行結果
1 |
PHP <span class="green">Notice</span>: <span class="green">Array</span> to <span class="orange">string</span> conversion<span class="orange"> in</span> /XXXX.php on line<span class="red"> 5</span> |
警告が出て、実行できませんでした。
つまり、join関数で指定する配列は一次元配列でないといけないということがわかります。
PHPで推奨されないjoinの書き方
PHPで推奨されないjoinの書き方があります。
それが、区切り文字を指定せず、配列のみを与える以下のような書き方です。
1 2 |
$arr = array("foo", "bar"); echo join($arr);//foobar |
joinは区切り文字を指定せずに配列のみ与えても結合してくれますが、この書き方は、PHP4.2以前ではjoin()に区切り文字の指定がなかったことから可能だったものなので、今後、PHPのバージョンアップデートによってこの書き方が廃止されることが十分にあり得ます。
上記のような書き方をしている場合は以下の書き方のようにきちんと第一引数に区切り文字、第二引数に配列を与えるように書きましょう。
正しい書き方
1 2 |
$arr = array("foo", "bar"); echo join("",$arr);//foobar |
join関数(implode関数)とexplode関数の違い
join関数と似たような関数で、explode関数というものが存在します。
このふたつの関数は非常によく似ているため、初心者のエンジニアの方は「どっちだっけな…」と迷ってしまうことも多いと思います。
よく似ている二つの関数ですが実は、全く異なる動作をします。
join関数
join関数は配列の要素を結合して文字列に変換する関数で、結合時にデリミタと言う区切り文字を付加することが出来ます。
join(”区切り文字”,”文字列化する配列”);
1 2 3 4 5 6 7 |
$productCsvData = array(<span class="orange">"AAA"</span>,<span class="orange">"BBB"</span>,<span class="orange">"CCC"</span>); $string = join(<span class="orange">","</span>,<span class="orange">"$produCsvData"</span>); / $stringの中身は「<span class="orange">"AAA,BBB,CCC"</span>」となる / |
explode関数
explode関数はjoin関数とは逆で区切り文字に付加されている文字列を配列に分割するというものです。
explode(”区切り文字”,”配列のためのインデックス”);
1 2 3 4 5 6 7 |
$memberData =<span class="orange"> "AA-BB-CC"</span>; $array = explode(<span class="orange">"_"</span>,<span class="orange">"memberData"</span>); / $arrayの中身は「array(<span class="orange">"AA"</span>,<span class="orange">"BB"</span>,<span class="orange">"CC"</span>)」となる / |
まとめ
今回はPHPのjoin関数について詳しく解説してきました。
今回解説した内容は、
- join関数とは配列の要素を結合して文字列にするための関数
- join関数のサンプルコード
- join関数はimplode関数のエイリアスなので、この二つの関数は全く同じもの
- join関数は引数の順番が違っていても動作する
- join関数は二次元配列を指定できない
- join関数を書くときは第一引数に区切り文字、第二引数には、配列を与えるように書く
- explode関数はjoin関数とは逆で区切り文字に付加されている文字列を配列に分割する関数
以上になります。
冒頭でもお話しした通り、join関数はPHPの基本関数なので、これからエンジニアを目指す方、プログラマーを目指す方は必ず押さえておきたい部分です。
初心者の方には難しいと思う部分もあったと思いますが、今は理解できなくてもこれから学習を進めていくとともにわかる部分が広がっていくと思うので、わからなくても諦めずに学習してくださいね。