文字列を指定した区切り文字で分割したい
CSVデータや改行された文字列を配列に変換したい
こんにちは。フリーランスエンジニアとして働く傍ら、スキルを生かして専門記事のライターとしても活躍しているワキザカ サンシロウです!
皆さんはあるルールに基づいた文字列を意図したとおりに配列に変換したいと思ったことはありませんか?例えば、カンマ(,)で区切られた文字列を分割したり、1行ごとのデータを配列に変換するような場合です。
これらの文字列の分割操作はexplode関数を使うことで実現できます。
この記事ではそんなexplode関数について、以下の内容について解説していきます。
- explode関数とは
- explode関数を理解する3ステップ
- explode関数以外の文字列分割方法
explode関数以外の文字列分割法についても解説していますので、ぜひ参考にしてください。
PHPのexplode関数とは
まずはexplode関数の概念を説明します。explode関数とは、対象の文字列を指定した文字列で分割するための関数です。
例えば、「2019/01/31」から「2019」のみ取得したい場合を考えてみましょう。explode関数を使うと、「2019/01/31」をスラッシュ(/)で区切ることで、次の三つの要素に分割することができます。
- 要素1:2019
- 要素2:01
- 要素3:31
explode関数は返り値に配列として値が戻ってくるため、要素数に「0」を指定することで「2019」を取得することができます。このように、指定した文字列で文字列を区切り、要素を指定して値を利用するための仕組みとして利用できます。
PHPのexplode関数を理解する3つのステップ
その1 explode関数の構文
ここではexplode関数の具体的な書き方について見ていきましょう。
explode関数の構文
explode ( 区切り文字列 , 対象の文字列 ,最大要素数 )
-
explode関数の引数
- 第一引数には対象の文字列を分割するための区切り文字を指定します。
- 第二引数には対象の文字列を指定します。
- 第三引数を指定した場合は、返り値の配列の最大要素数を指定できます。
-
explode関数の返り値
- 対象文字列を区切り文字で分割した文字列の配列を返します。
- 第三引数の最大要素数を指定した場合は要素数分の配列を返します。
関数の書き方だけではいまいちイメージできないかもしれません。次項では具体的な書き方に関してご紹介します。
その2 explode関数の使い方
では実際にexplode関数のプログラムを作って動作を確認してみましょう。
さきほどの「2019/01/31」から「2019」を取得するケースを例に、実際のコードをご紹介します。以下のプログラムでは文字列に対して区切り文字スラッシュ「/」を指定して文字列を分割しています。
サンプルプログラム
<?php // 文字列を分割 $arrayDayList = explode ("/","2019/01/31"); // 結果を出力 print_r($arrayDayList); ?>
実行結果:
Array ( [0] => 2019 [1] => 01 [2] => 31 )
このようにスラッシュ「/」で区切られたすべての要素が返り値となっていることがわかりますね。
では次に、最大要素数を指定してみましょう。第三引数を指定した場合は次のように分割されます。
サンプルプログラム
<?php // 文字列を分割 $arrayList = explode("/","A/B/C/D/E",2); // 結果を出力 print_r($arrayList); ?>
実行結果:
Array ( [0] => A [1] => B/C/D/E )
第三引数の最大要素数を2で指定したため、返り値の配列が「A」とそれ以降の「B/C/D/E」に分かれていることがわかりますね。このように、最大要素数を指定することで文字列の分割数を指定することができます。
その3 explode関数の発展的な使い方
ここではexplode関数の発展的な使い方について見ていきましょう。
改行データの分割
テキストファイルなどから読み込んだ改行コードが入っている文字列を、配列に変換したい場合があるとします。たとえば、以下のようなデータを配列に変換したい場合はどうすればよいでしょうか?
メロン スイカ みかん りんご
1行1データとして、配列に変換したい場合は、以下のように区切り文字に改行コードを指定します。
サンプルプログラム
<?php // 改行コードを指定して分割 $arrayLine = explode ("\n","メロン\nスイカ\nみかん\nりんご"); // 改行コードがいくつかのパターンがあるため次のような // 形もあります // $arrayLine = explode ("r","2019/01/31"); // $arrayLine = explode ("nn","2019/01/31"); // 結果を出力 print_r($arrayLine); ?>
実行結果:
Array ( [0] => メロン [1] => スイカ [2] => みかん [3] => りんご )
CSVデータを取得
先程の改行コードの例を用いて、次は取得したCSVデータを配列に変換してみましょう。
CSVデータ
メロン,スイカ,バナナ 人参,じゃがいも,キャベツ 白玉,あずき,もも
サンプルプログラム
<?php // CSVデータ $data = "メロン,スイカ,バナナ\n人参,じゃがいも,キャベツ\n白玉,あずき,もも"; // 改行コードで分割 $arrayLine = explode ("\n", $data); // 配列を定義 $output = []; // 分割されたデータを要素数分繰り返し取得 for($i = 0; $i < count($arrayLine); $i++) { // カンマ(,)で分割する $output[] = explode(",", $arrayLine[$i]); } // 結果を出力 print_r($output); ?>
実行結果:
Array ( [0] => Array ( [0] => メロン [1] => スイカ [2] => バナナ ) [1] => Array ( [0] => 人参 [1] => じゃがいも [2] => キャベツ ) [2] => Array ( [0] => 白玉 [1] => あずき [2] => もも ) )
このようにCSVのデータも配列に変換することができましたね。CSVファイルを実際に読み込んで処理を行いたい場合は以下の記事もぜひ参考にしてください。
explode関数以外の文字列分割方法
preg_split関数
preg_split関数は区切り文字列に正規表現を指定して文字列を分割することができます。
たとえば「AAA , BBB , CCC」から「AAA」のみを取得したい場合、以下のように記述します。
サンプルプログラム
<?php // 文字列を分割 $arrPregSplit = preg_split("/[,]/","AAA,BBB,CCC"); // preg_splitの結果を出力して値を確認 var_dump($arrPregSplit); ?>
実行結果:
array(3) { [0]=> string(3) "AAA" [1]=> string(3) "BBB" [2]=> string(3) "CCC" }
preg_split関数については以下の記事でも詳しく解説しています。
str_split
str_split関数は文字列を1文字ずつ分割したり、指定した文字数で分割することができます。
以下の例では文字列を1文字ずつ分割しています。
サンプルプログラム
<?php // 文字列 $str = 'samurai'; // 文字列を1文字ずつ分割 $array = str_split($str); //結果を出力 var_dump($array); ?>
実行結果:
array(7) { [0]=> string(1) "s" [1]=> string(1) "a" [2]=> string(1) "m" [3]=> string(1) "u" [4]=> string(1) "r" [5]=> string(1) "a" [6]=> string(1) "i" }
str_split関数については、以下の記事でも詳しく解説していますので合わせて参考にしてください。
PHPについてもっと学びたい方へ
ここでは、PHPで文字列を分割するexplode関数について、初心者でも無理なく進められるように解説してきました。プログラミングを身につけるためには、たくさんのトライ・アンド・エラーが必要です。しかし、PHPはできることがたくさんある分、非常に奥の深い言語です。
PHPのスキルを身に着けられるか不安・・・
PHPを体系的に勉強したい
と感じている方は以下の記事も合わせてご覧ください。
PHPの概要から基本的な使い方まで網羅していますので、きっと参考になるのではと思います。
まとめ
今回は、PHPで文字列を分割するためのexplode関数について、使い方を解説しました。実際の業務でも区切り文字で区切った文字列を保存して、使うケースはよくあります。
explode関数はとてもシンプルで使う機会も多いので、ぜひ使い方については理解しておきましょう。