PHP explode関数を使って、文字列を分割する
explodeとは
文字列を指定された区切り文字により分割するPHP関数。ハイフン付きの電話番号や郵便番号などを分割する際に、よく使われる。
フォーマットした電話番号や誕生日などの文字列を分割したい時に、PHPのexplode関数を使えば便利でしょう。
また、Ajaxを使って、複数のキー値が配列として、簡単にサーバーにPOSTできないため、キー値をカンマ区切りで連結し、文字列としてサーバーに渡す場合、その時に、explode関数の出番だと思います。サーバー側ではexplode関数を使って、カンマで連結したキーの文字列を分割すれば、簡単に元のキー値を取得できるわけです。
文法
explode( '区切り文字’, '分割対象文字列’ [, オプション: 別途説明] );
返り値
分割対象文字列を区切り文字で分割して、その文字列の配列を返します。
オプション
簡単に説明しますと、戻り値:配列の要素の数です。
分割した後の文字列の数>配列の要素の数の場合、入れない場合、区切り文字を含めて、配列の最後の要素に入れます。(数字1を指定したら、ただのいたずらですね)
マイナス(-n)数字を指定した場合、後ろから数えて、n個目を除いて、 全ての分割した後の文字列を配列で返すことです。(数字-1は実際のプロジェクトによく使われるかと思いますので、後ほど、例を挙げます。)
数字0を指定した場合、あのいたずらの数字1と同じく、あんまり意味ないと思います。
例1:文字列を分割
実際のプロジェクトには、画面上のハイフン付き電話番号などの文字列をハイフンで分割して、DB(データベース)のtel1,tel2,tel3みたいなカラムに保存するという仕様がよくあるかと思いますので、電話番号の分割を例として挙げます。(当然ですが、電話番号だけではなく、実際はいろんな場面に、explode関数が使われています。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $object = "080-1234-5678"; // 分割対象文字列:電話番号、日付など $delimiter = "-"; // 区切り文字:「,」や「|」などよく使う $rs = explode($delimiter, $object); // 文字列を分割 var_dump($rs); // 結果、array{"080" "1234" "5678"} ?> |
WEBアプリケーションにおいて、下記のような仕様がよくあるかと思います。
<仕様>
勤務入力画面を再描画(リフレッシュ)せずに、画面上に入力した勤務時間を全てDB(データベース)に反映する
再描画(リフレッシュ)しないということで、Ajaxをしか使えないため、クライアント側は下記のような実装がありました。
<JS実装>
1 2 3 4 5 6 7 8 |
var work_time_from = ""; $(this).find('.work_time_from').each(function(index, element){ work_time_from = work_time_from + $(element).val() + ","; }); |
この実装で、work_time_fromの一番後ろに、必ず「,」が付いています。これは余計なデータなので、サーバー側(PHP)では、それを取り除く必要があります。
(当時の筆者を含めて)オプションの存在が知らない方の実装は、下記の通りです。(実在の実装です)
例2:文字列を分割、オプションを使わない
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php $work_time_from = "9:00,9:00,9:30,10:00,9:00,"; //AjaxPOSTから渡された勤務開始時間です、一番後ろに「,」が付いています $delimiter = ","; $rs = explode($delimiter, $work_time_from); //var_dump($rs); //結果:array{"9:00", "9:00", "9:30", "10:00", "9:00", "" } $rs = array_slice($rs ,0, -1); // 配列の一番最後の「""」を取り除く var_dump($rs); //結果:array{"9:00", "9:00", "9:30", "10:00", "9:00"} ?> |
オプションを使えば、一番最後の「""」を一発で取り除くことが出来て、上記の実装を1行減らすことができます。
例3:文字列を分割、オプションを使う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php $work_time_from = "9:00,9:00,9:30,10:00,9:00,"; //AjaxPOSTから渡された勤務開始時間です、一番後ろに「,」が付いています $delimiter = ","; $rs = explode($delimiter, $work_time_from, -1); var_dump($rs); //結果:array{"9:00", "9:00", "9:30", "10:00", "9:00" } ?> |
まとめ
今回はexplode関数を使って、文字列を分割する方法を紹介しました。いかがでしょうか。すっきりしましたね。ただ1行が減ることが開発効率をアップすr、読みやすくなる、運用保守しやすくなるなどいろんなメリットがあると思います。
explode関数と反対するのはimplode関数と思いますが、興味を持っている方は、「PHP 配列要素 連結」も読んでね~~
ディスカッション
コメント一覧
まだ、コメントがありません