PHPのsplitで文字列を分解して配列で返す方法【初心者向け】
プログラミング初心者向けにsplit関数を使って文字列を分解して配列で返す方法について解説しています。推奨のpreg_splitの使い方、explode関数との違いについて実際にソースコードを書きながら説明しています。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
PHPのsplitで文字列を分解して配列で返す方法について解説しています。
PHP5.3からsplit関数を使うことは非推奨となり、preg_splitを使うことが多くなりましたが、explode関数との違いについても触れているので、ぜひ理解していきましょう。
そもそもPHPが何か分からない場合は、先にPHPとはの記事をご覧ください。
なお本記事は、TechAcademyのPHPオンライン講座の内容をもとにしています。

split関数というのは何でしょうか?

文字列を何らかの文字で区切って、配列として分割してくれる関数なんだよ。

文字列が区切られているってことは、文章というよりもデータに近い感じですか?

そうそう。URLなんかもスラッシュで区切られてるよね。とりあえずsplit関数について見てみよう!
split(preg_split)関数とは
splitは、正規表現で文字列を分割する関数です。
文字列、あるいは文字列が入った変数に対して何らかの条件で分割し、配列にして返してくれます。
splitは非推奨
PHP5.3からはsplitが非推奨となりました。
spliteの代替えの関数は、preg_splitになります。 PHPが採用している正規表現は複数あり、PHPのsplit関数が内部で使用するのはPOSIX正規表現です。
PHPのバージョンが上がり続ける中でPOSIX正規表現自体が非推奨となった(regex拡張モジュールが非推奨)ことで PCREモジュールのPerl互換正規表現を使用するpreg_split関数を使うようにしなくてはならないということです。
preg_splitもsplitとほぼ同じで、正規表現ルールにもとづいて、文字列を分割して返します。
splitとexplodeの違い
splitには、同じように文字列を分割して配列にするexplodeという関数もあります。
splitの代替えであるpreg_splitも一緒に挙動を確認してみましょう。 a,b,cという文字列をカンマを区切りにして分割してみます。
<?php $a = "a,b,c"; $b = split(",",$a); $c = explode(",",$a); $d = preg_split("/,/",$a); print_r($b); print_r($c); print_r($d); ?>
「print_r」で出力される配列の中身は全部同じになります。
「explode」は、文字によって文字列を分割して、配列として返す関数です。
「split(preg_split)」は、正規表現によって文字列を分割して、配列として返す関数です。
「/,/」では、正規表現を駆使した感じには見えませんので、後で実際に正規表現らしいものを使用してみます。 explodeは、正規表現を使わない分、速い。 splitは、正規表現を使う分、遅いと覚えても構いません。

正規表現で分割する、区切るって難しそうですね。

explode関数のほうが使う頻度が高いので、そういうことも出来るって覚えるぐらいでいいかな。

わかりました!
split(preg_split)関数の書き方
splitとpreg_splitの書き方を見てみます。
//配列を返す split ( パターン文字列 , パターンで区切る対象文字列 [, 分割リミット数 = -1 ] ) //配列を返す preg_split ( パターン文字列 , パターンで区切る対象文字列[, 分割リミット数 = -1 [, フラグオプション = 0 ]] )
「$pattern」は、文字列を区切る正規表現を書きます。 $string($subject)には、区切って配列として分割する文字列や文字列が入っている変数を指定します。
「$limit」は、オプションで省略しても構わないのですが、分割の最大数を指定できます。残った場合、最後に詰め込まれます。 -1というのは省略時の初期値で制限無し(条件に従っていくつでも分割する)という意味になります。
$flagsはpreg_splitにしかないオプションですが、配列として返す値に条件をつけることが出来ます。
[PR] PHPプログラミングで挫折しない学習方法を動画で公開中
split(preg_split)を実際に書いてみよう
フォームから入力された検索文字列から空白を除去して分割してみます。 半角の空白が複数あるかもしれません。
その場合、単純に半角空白で区切った場合、配列の1つの値が空白になってしまいます。 全角の空白の場合文字コードはどうなるでしょうか?
<?php //フォームから受け取った文字列 $keyword = "プログラミング 学習サイト テックアカデミー"; $keyword = mb_convert_kana($keyword, 's','utf-8'); $array_keyword = preg_split('/[s]+/', $keyword, -1, PREG_SPLIT_NO_EMPTY); print_r($array_keyword); ?>
「mb_convert_kana」で全角スペースを半角スペースに変換。 全角スペースは文字コードによって異なるので、文字コードを指定します。
正規表現を/[s]+/にして、1つ以上の連続した半角スペースで分割。 「s」は空白を意味してします。+はそれを1回以上続くことを意味します。
「PREG_SPLIT_NO_EMPTY」は、オプションで空文字列以外だけを返すようにします。 「print_r」の表示結果が、空白を含まず、それぞれの文字だけが配列に代入されていれば成功です。
文字列を分割して配列として返す関数には、「explode」や「split(preg_split)」などがある。 というのを覚えておけば大丈夫です。
おわりに
PHPのpreg_split関数の使い方を解説しました。
頻繁に利用する関数ではないですが、いざという時に便利なので、ぜひ書き方を覚えておきましょう。

空白が、バックスラッシュとsで表現されてますね。+は一回以上って意味なんですか?

そうそう。ちょっと難しいけど正規表現の書き方なんだ。

文字で区切るexplodeのほうがわかりやすいですね。

正規表現によって複雑に区切るのが、preg_split関数、単純に文字で区切るのがexplodeって覚えるといいね。
また、PHPを勉強していて、
- もっと効率的に勉強したい
- 誰かに聞きながら学びたい
- 自分でWebサービスを作りたい
と思ったことはないでしょうか。
そんな方のために、TechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、オリジナルWebサービスを開発することが可能です。
独学に限界を感じている場合はご検討ください。

プログラミングを独学していて、このように感じた経験はないでしょうか?
- ・調べてもほしい情報が見つからない
- ・独学のスキルが実際の業務で通用するのか不安
- ・目標への学習プランがわからず、迷子になりそう
テックアカデミーでは、このような
学習に不安を抱えている方へ、現役エンジニア講師とマンツーマンで相談できる機会を無料で提供
しています。
30分間、オンラインでどんなことでも質問し放題です。
「受けてよかった」と感じていただけるよう
厳しい試験を通過した講師
があなたの相談に真摯に向き合います。
「ただ気になることを相談したい」
「漠然としているがプロの話を聞いてみたい」
こんな気持ちでも大丈夫です。
無理な勧誘は一切ありません
ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)