こんにちは! フリーランスエンジニア兼ライターのワキザカ サンシロウです!
突然ですが、PHPで文字列を分割する方法を知っていますか?
カンマ区切り、タブ区切り、スラッシュ区切りなど区切り文字の前後の値を使うケースは、よくありますよね。
この記事では、
[実践] preg_splitの使い方
[実践] explodeの使い方
といった内容について解説していきます。
タイトル通り、「なぜsplit関数を使うべきでないのか」「代わりにどうすればよいのか」など丁寧に解説していきます!
split関数とは?
まずは、split関数が何をするものなのかについて解説します!
split関数とは、文字列を分割して配列を返すための関数です。
例えば、「 AAA , BBB , CCC 」という文字列があるとします。
split関数を使うと、「 AAA , BBB , CCC 」をカンマ(,)で区切ることで、次の三つの要素に分割することができます。
要素1. AAA
要素2. BBB
要素3. CCC
配列として値が戻ってくるため、要素数に「0」を指定することで「AAA」を取得することができます。
このように、指定した文字列区切り文字で分割し、要素を指定して値を利用するための仕組みとして使うことできます。
PHPで文字列を分割するための方法については以下記事でまとめています!
split関数を使うのべきではない!?
なぜ使うべきでないのか
split関数はあまり使うことをおすすめしません。
なぜならばPHP5.3.0以降は非推奨になっています。
そしてPHP7からはこの関数自体が削除されており使うことができません。
古いバージョンのPHPで作られたプログラム(PHP4やPHP5.3.0以前)については使えますが、現在のPHPの最新バージョンが7.x系であることを考えると使うべきではないでしょう。
代わりに使うべき関数とは?
では、split関数を使うべきではないということで代わりにpreg_split関数やexplode関数を使うと同じような効果を得られます。
このあとの章でpreg_splitやexplode関数について解説していきます!
preg_split関数の使い方
対象文字列・区切り文字列のみの場合
まずは、対象文字列、区切り文字列のみを使ったシンプルな使い方について説明します!
「 AAA , BBB , CCC」から「AAA」を取得するケースを例に、実際のコードをご紹介します。
サンプルコード:
<?php // 文字列を分割 $arrPregSplit = preg_split("/[,]/","AAA,BBB,CCC"); // preg_splitの結果を出力して値を確認 echo '【preg_split関数の結果】'."\n"; echo var_dump($arrPregSplit); ?>
実行結果:
【preg_split関数の結果】 array(3) { [0] => string(3) "AAA" [1] => string(3) "BBB" [2] => string(3) "CCC" }
ちなみに、preg_splitは正規表現を使って区切ることができるので、カンマと半角スペースなど複数で区切ることができます。
サンプルコード:
<?php // 文字列を分割 $arrPregSplit = preg_split("/[\s,]/","AAA,BBB,CCC DDD"); // preg_splitの結果を出力して値を確認 echo '【preg_split関数の結果】'."\n"; echo var_dump($arrPregSplit); ?>
実行結果:
【preg_split関数の結果】 array(4) { [0] => string(3) "AAA" [1] => string(3) "BBB" [2] => string(3) "CCC" [3] => string(3) "DDD" }
区切り文字、対象文字列のみ使うだけでも、とても便利ですよね。
最大要素数ありの場合
続いて、最大要素数を指定した場合についてご紹介します。
区切り文字以外に違いはないので、ここからはpreg_splitのみコードをもとに説明します。
サンプルコード:
<?php $arrayList = preg_split("[,]","AAA,BBB,CCC",2); echo var_dump($arrayList); ?>
array(2) { [0] => string(3) "AAA" [1] => string(7) "BBB,CCC" }
このように、分割する最大要素数を指定することができます。
最大要素数に「2」を指定しているため、「AAA」、「BBB」、「CCC」と3つに分割するのではなく「AAA」、「BBB,CCC」の2つに分割されたわけですね。
explode関数の使い方
次にexplode関数の使い方を紹介します。
「2018/01/31」という文字列から「2018」を取得する場合を例に次のサンプルコードをみてみましょう。
コード:
<?php // 文字列を分割 $arrayDayList = explode ("/","2018/01/31"); print_r($arrayDayList);
実行結果:
Array ( [0] => 2018 [1] => 01 [2] => 31 )
とてもシンプルですよね。
split関数は第一引数に正規表現を使うことができますが、explode関数の場合は正規表現ではなく区切りたい文字列を指定します。
もっと使い方を学びたい人は次の記事をご覧ください!
まとめ
今回は、文字列分割方法のpreg_split、explodeの使い方について解説しました!
文字列の分割はWEBアプリケーションを作っていく上で切っても切れない技術の一つです。
ぜひこの機会に覚えてみてくださいね!