PHPのsplitで文字列を分解して配列で返す方法【初心者向け】
プログラミング初心者向けにsplit関数を使って文字列を分解して配列で返す方法について解説しています。推奨のpreg_splitの使い方、explode関数との違いについて実際にソースコードを書きながら説明しています。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
PHPのsplitで文字列を分解して配列で返す方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
しかし、split関数はPHP5.3から非推奨となり、PHP 7.0.0で削除されています。
split関数の代用として、preg_split関数やexplode関数などがあり、本記事ではこの2つについても解説していますので、ぜひ理解していきましょう。
目次
そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。
split関数というのは何でしょうか?
文字列を何らかの文字で区切って、配列として分割してくれる関数なんだよ。
文字列が区切られているってことは、文章というよりもデータに近い感じですか?
そうそう。URLなんかもスラッシュで区切られてるよね。とりあえずsplit関数について見てみよう!
split関数とは
split関数は、正規表現で文字列を分割する関数です。
文字列、あるいは文字列が入った変数に対して何らかの条件で分割し、配列にして返してくれます。
splitは非推奨の関数
PHP5.3からはsplitが非推奨になりました。
PHP 7.0.0で削除されています。
splitの代替えの関数はpreg_splitです。
PHPが採用している正規表現は複数あり、PHPのsplit関数が内部で使用するのはPOSIX正規表現です。
PHPのバージョンが上がり続ける中で、POSIX正規表現自体が非推奨となった(regex拡張モジュールが非推奨)ことで 、PCREモジュールのPerl互換正規表現を使用するpreg_split関数を使う必要があるということです。
preg_splitもsplitとほぼ同じで、正規表現ルールにもとづいて文字列を分割して返します。
split関数の代用となる関数
split関数の代用としてpreg_split関数、explode関数があります。
正規表現を使用して文字列を分割する場合はpreg_split関数を使用します。
正規表現を使用しない場合はexplode関数が使用できます。
preg_split関数とは
正規表現によって文字列を分割して、配列として返す関数です。
<?php $str = "a,b,c"; $result = preg_split("/,/", $str); print_r($result); ?> Array ( [0] => a [1] => b [2] => c )
「/,/」という正規表現に当てはまる「,」を基準に「a,b,c」を「a」「b」「c」に分割した配列を返しています。
「/,/」では正規表現を駆使した感じには見えませんので、後述で正規表現らしいものを紹介します。
explode関数とは
正規表現は使用せず、文字によって文字列を分割して配列として返す関数です。
<?php $str = "a,b,c"; $result = explode(",", $str); print_r($result); ?> Array ( [0] => a [1] => b [2] => c )
「,」で「a,b,c」を「a」「b」「c」に分割した配列を返しています。
正規表現で分割する、区切るって難しそうですね。
explode関数のほうが使う頻度が高いので、そういうこともできるって覚えるぐらいでいいかな。
わかりました!
[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは
split(preg_split)関数の書き方
splitとpreg_splitの書き方を見てみます。
split関数の書き方
split(パターン文字列 , パターンで区切る対象文字列 [, 分割リミット数 = -1 ] )
パターン文字列は、文字列を区切る正規表現を書きます。
パターンで区切る対象文字列には、区切って配列として分割する文字列や文字列が入っている変数を指定します。
分割リミット数は、オプションで省略しても構わないのですが、分割の最大数を指定できます。
残った場合、最後に詰め込まれます。
-1というのは省略時の初期値で制限なし(条件に従っていくつでも分割する)という意味です。
preg_split関数の書き方
preg_split(パターン文字列 , パターンで区切る対象文字列[, 分割リミット数 = -1 [, フラグオプション = 0 ]] )
パターン文字列は、 パターンで区切る対象文字列、分割リミット数についてはsplitと同様です。
フラグオプションは配列として返す値に条件をつけることができます。
実際に書いてみよう
ある文字列を英単語ごとに区切って、配列にしてみましょう。
<?php $keyword = "1apple2lemon3grape4"; $array_keyword = preg_split('/[a-z]+/', $keyword, -1, PREG_SPLIT_NO_EMPTY); print_r($array_keyword); ?> Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
[a-z]はアルファベットa~zのどれかの文字を表しています。
+は直前のパターン文字列が1回以上続くことを意味します。
[a-z]が1回以上続く、つまり「/[a-z]+/」とはなにかしらの英単語(abc, xyzなどの意味のないアルファベットの羅列も含む)を表しています。
その結果、文字列「1apple2lemon3grape4」が英単語ごとに分割され「1」「2」「3」「4」の配列が返されます。
「PREG_SPLIT_NO_EMPTY」は、オプションで空文字列以外だけを返すようにします。
「print_r」の表示結果が空白を含まず、それぞれの文字だけが配列に代入されていれば成功です。
おわりに
PHPのpreg_split関数の使い方を解説しました。
頻繁に利用する関数ではないですが、いざという時に便利なので、ぜひ書き方を覚えておきましょう。
空白が、バックスラッシュとsで表現されてますね。+は1回以上って意味なんですか?
そうそう。ちょっと難しいけど正規表現の書き方なんだ。
文字で区切るexplodeのほうがわかりやすいですね。
正規表現によって複雑に区切るのが、preg_split関数、単純に文字で区切るのがexplodeって覚えるといいね。
PHPを学習中の方へ
これで解説は終了です、お疲れさまでした。
- つまずかず「効率的に」学びたい
- 副業や転職後の「現場で使える」知識やスキルを身につけたい
プログラミングを学習していて、このように思ったことはありませんか?
テックアカデミーのPHP/Laravelコースでは、第一線で活躍する「プロのエンジニア」が教えているので、効率的に実践的なスキルを完全オンラインでしっかり習得できます。
合格率10%の選考を通過した、選ばれたエンジニアの手厚いサポートを受けながら、PHP/Laravelを使ったWebアプリケーション開発を学べます。
まずは一度、無料体験で学習の悩みや今後のキャリアについて話してみて、「現役エンジニアから教わること」を実感してみてください。
時間がない方、深く知ってから体験してみたい方は、今スグ見られる説明動画から先に視聴することをおすすめします!