こんにちは!エンジニアのオータケです!
今回はimplodeとexplode関数について解説します。
implode関数は配列の要素を結合して文字列に変換する関数です。この結合時にデリミタとよばれる区切り文字を付加することができます。
explode関数はimplode関数とは逆で区切り文字の付加されている文字列を配列に分割するというものです。
この記事を見ることで
・implode関数の使い方
・implode関数の引数についての注意点
・implode関数に二次元配列を渡したときの動作
といった内容から
・explode関数の使い方
といったimplode関数に似た関数の使い方について解説していきます!
implode関数とは?
配列の要素を区切り文字を付けて文字列にする
implode関数とは配列の要素を結合して文字列にします。
この際にデリミタと呼ばれる区切り文字を付加することができます。
イメージできますか?
早速サンプルコードを見てみましょう。
<?php $fruits = ['melon', 'apple', 'banana']; $result = implode(',', $fruits); echo $result; ?>
実行結果:
melon,apple,banana
先程説明したとおりになりますが、実行結果を見るとこのような形で配列の要素がカンマ区切りで文字列になっていることがわかります。
implode関数の第一引数には要素の間にはさみたい区切り文字を指定します。
今回の場合はカンマを指定しているので各要素である「melon」や「apple」の間に「,」を追加して結合しています。
使い方は難しくないですよね?
次の項ではimplode関数の引数を逆にした場合どうなるかということについて解説をしていきます!
引数の順番が違っても動く?
通常、関数には引数の順番ごとに決まった値を渡していく必要性があります。
しかし、このimplode関数は特殊な関数で第一引数と第二引数の値を逆にしても動きます。
どういうことなのでしょうか?
前項で使用したサンプルコードを基本にしてimplode関数の引数を逆にしたサンプルコードをごらんください。
<?php $fruits = ['melon', 'apple', 'banana']; $result = implode($fruits, ','); echo $result; ?>
実行結果:
melon,apple,banana
このように、引数を逆にしても同じ結果を得ることができました。
なぜこのようなことになるのでしょうか?
PHPの公式ドキュメントを確認すると次のような記述があります。
注意:
implode()は、歴史的な理由により、引数をどちら の順番でも受けつけることが可能です。しかし、 explode() との統一性の観点からは、 ドキュメントに記述された引数の順番を使用する方が混乱が少なくなるでしょう。
引用:http://php.net/manual/ja/function.implode.phpplode.php
つまり、引数の順番が違っても動くということが説明されています。
ただしドキュメントにあるように、第一引数はデリミタ(区切り文字)を指定し第二引数に配列変数を指定する方法が混乱が少なくなるためよいでしょう。
このあたりは一歩間違えるとバグのもとになりかねないので注意が必要でしょう!
implode関数で二次元配列を指定した場合
前章ではimplode関数に一次元配列を指定して配列の要素を文字列に結合していました。
しかし、この配列が二次元配列であった場合はどうなるのでしょうか?
サンプルコードを見てどうなるか試してみましょう。
<?php $fruits = [['mask_melon', 'homerun_melon'], 'apple', 'banana']; $result = implode(',', $fruits); echo $result; ?>
実行結果:
PHP Notice: Array to string conversion in /XXXX.php on line 5
警告が出て正しく実行できませんでした。
つまり、implode関数で指定する配列は一次元配列である必要があります。
ちなみにおまけとして・・・
この変数$fruitsが空の配列である場合はどうなるでしょうか?
<?php $fruits = []; $result = implode(',', $fruits); echo $result; ?>
このようなコードですね。
こういった場合は空の文字列が返ってきます。
explode関数を使って文字列を配列に分割
ここまでimplode関数について解説しました。
今度はimplode関数の逆の動きをするexplode関数について解説していきます。
逆というのは文字列を特定の文字で配列に分割することを指します。
早速サンプルを見てみましょう。
<?php $fruits = 'melon,apple,banana'; $result = explode(',', $fruits); var_dump($result); ?>
実行結果:
array(3) { [0]=> string(5) "melon" [1]=> string(5) "apple" [2]=> string(6) "banana" }
変数$fruitsではmelon、appleなどの単語の間にカンマで区切られた文字列を保持しています。
この文字列をexplode関数に渡すことで変数$resultには分割した結果となる配列変数が返されます。
実行結果を見るとカンマがなくなり、それぞれの単語が配列の要素になっていることがわかるかと思います。
explode関数の詳しい使い方については次の記事を参考にしてみてください!
まとめ
いかがでしょうか?
今回は配列の各要素を結合して文字列にするimplode関数について解説してきました。
同時に、文字列を区切り文字を元に配列に分割するexplode関数についても見てきました。
これらの関数はcsvファイルなどとの相性もよく、使うことがあるため覚えておいて損はないでしょう!