PHPでは、文字列を分割するためのさまざまな関数が用意されています。
この記事では、
・文字列を文字列や文字数で分割する方法
・指定した文字数の文字列を取得する方法
という基本的な内容から、
・文字列を正規表現を使用して分割する方法
・URL文字列を分割する方法
・マルチバイト文字列を分割する方法
・指定した文字数で文字列を丸める方法
といった応用的な内容に関しても解説していきます。
今回はそんな文字列の分割に関する操作について、わかりやすく解説します!
文字列の分割に関する操作
文字列を文字列で分割する
ここではexplode関数を使用して、文字列を分割する方法について解説します。
explode関数とは
文字列を複数の文字列に分割するためには、explode関数を使用します。
書き方:
array explode($デリミタ, $入力文字列 [,$limit])
引数:
第一引数には分割する区切り文字であるデリミタを指定します。
第二引数には入力文字列を指定します。
第三引数を指定した場合は、正の値であれば、返り値の配列には指定した最大limitの要素数が含まれ、最後の要素には文字列の残りの部分が全て含まれます。
戻り値:
分割した文字列を配列として返します。
explode関数を使用して、文字列をスペース区切りで分割するサンプルです。
サンプルプログラム:
<?php $fruits = 'apple orange melon banana pineapple'; //半角スペース区切りで分割する $fruits_array = explode(' ', $fruits); print_r ($fruits_array); ?>
実行結果:
Array ( [0] => apple [1] => orange [2] => melon [3] => banana [4] => pineapple )
実行結果のとおり、半角スペースで分割された文字列が配列に格納されていることがわかりますね!
以下のように’:'(コロン)で分割した時、間に文字列が含まれていない場合は配列の要素は空になります。
サンプルプログラム:
<?php $fruits = 'apple:orange::melon:banana:::'; //:コロン区切りで分割する $fruits_array = explode(':', $fruits); print_r ($fruits_array); ?>
実行結果:
Array ( [0] => apple [1] => orange [2] => [3] => melon [4] => banana [5] => [6] => [7] => )
文字列を文字数で分割する
ここではstr_split関数を使用して、文字列を分割する方法について解説します。
str_split関数とは
文字列を1文字ずつ分割したり、指定した文字数で分割する場合はstr_split関数を使用します。
書き方:
array str_split( $入力文字列 [, $分割文字数 ] )
引数:
第一引数には分割する対象の入力文字列を指定します。
第二引数を指定した場合は指定した文字数で入力文字列が分割されます。
戻り値:
分割した文字列を配列として返します。
str_split関数を使用して、文字列を分割するサンプルです。
サンプルプログラム:
<?php $val = 'samurai'; $val_array = str_split($val); print_r ($val_array); ?>
実行結果:
Array ( [0] => s [1] => a [2] => m [3] => u [4] => r [5] => a [6] => i )
文字数を指定して分割したい場合は、以下のようにstr_split関数の第二引数に分割文字数を指定します。
サンプルプログラム:
<?php $val = 'samurai engineer'; //3文字ずつ分割する $val_array = str_split($val, 3); print_r ($val_array); ?>
実行結果:
Array ( [0] => sam [1] => ura [2] => i e [3] => ngi [4] => nee [5] => r )
正規表現で文字列を分割する
ここではpreg_split関数を使用して、正規表現で文字列を分解する方法について紹介します。
preg_split関数とは
正規表現で文字列を分割するためには、preg_split関数を使用します。
書き方:
array preg_split($正規表現パターン, $入力文字列 [,$limit [,$flags]]);
引数:
第一引数には検索する正規表現パターンを指定します。
第二引数には分割する対象の入力文字列を指定します。
第三引数を指定した場合は、正の値であれば、返り値の配列には指定した最大limitの要素数が含まれ、最後の要素には文字列の残りの部分が全て含まれます。
第四引数を指定する場合は、以下のフラグを指定します。
PREG_SPLIT_NO_EMPTY:空文字列以外の文字列が分割されて返されます。
PREG_SPLIT_DELIM_CAPTURE:パターン中の()カッコによるサブパターンでキャプチャされた値も返されます。
PREG_SPLIT_OFFSET_CAPTURE:正規表現でマッチした各オフセット値が返されます。
戻り値:
分割した文字列を配列として返します。
preg_split関数を使用して、正規表現で文字列を分割するサンプルです。
サンプルプログラム:
<?php $fruits = 'apple orange melon banana pineapple'; //正規表現で分割する $fruits_array = preg_split('/[\s,]+/', $fruits); print_r ($fruits_array); ?>
実行結果:
Array ( [0] => apple [1] => orange [2] => melon [3] => banana [4] => pineapple )
正規表現の詳しい使い方については、以下の記事で詳細に説明しています!
URL文字列を分割する
ここではparse_url関数を使用して、URL文字列を分解する方法について説明します。
parse_url関数とは
URL文字列を解釈して、構成要素ごとに分割して取得したい場合はparse_url関数を使用します。
書き方:
parse_url( $URL文字列 [, int $component = -1 ] )
引数:
第一引数には対象のURL文字列を指定します。
第二引数には以下のいずれかのcomponentを指定します。
component:
PHP_URL_SCHEME、 PHP_URL_HOST、PHP_URL_PORT、 PHP_URL_USER、PHP_URL_PASS、 PHP_URL_PATH、PHP_URL_QUERY あるいは PHP_URL_FRAGMENT
戻り値:
第二引数を省略したときは連想配列を返します。
第二引数を指定した場合は、URL文字列の中のcomponentに対応する値を文字列または整数値で返します。
なお、parse_url関数はURL文字列として特定できる要素に関して連想配列で返し、不完全なURLであってもエラーとはなりません。
ただし、完全におかしなURLに関してはFALSEを返します。
parse_url関数を使用して、URLを分割するサンプルです。
サンプルプログラム:
<?php $url = 'https://www.sejuku.net/blog/'; //URLを分割する $url_array = parse_url($url); print_r ($url_array); ?>
実行結果:
Array ( [scheme] => http [host] => www.sejuku.net [path] => /blog/ )
マルチバイト文字列を分割する
ここではmb_split関数を使用して、マルチバイト文字列を分割する方法について説明します。
mb_split関数とは
マルチバイト文字列を正規表現で分割するにはmb_split関数を使用します。
書き方:
array mb_split( $パターン , $入力文字列 [, int $limit = -1 ] )
引数:
第一引数にはデリミタや正規表現のパターンを指定します。
第二引数には分割するマルチバイト文字列を指定します。
第三引数を指定した場合は、最大limit個の要素の配列に分割されます。
戻り値:
分割した文字列を配列として返します。
なお、mb_split関数は、mb_regex_encoding関数で指定した文字コードをエンコーディングしますので、mb_split関数を使用する前に文字コードを指定しておく必要があります。
mb_split関数を使用して、日本語マルチバイト文字列を分割するサンプルです。
サンプルプログラム:
<?php //文字エンコードUTF-8を指定 mb_regex_encoding('UTF-8'); $val = '侍,エンジニア,ブログ'; //カンマ区切りで分割 $return = mb_split(',', $val); print_r($return); ?>
実行結果:
Array ( [0] => 侍 [1] => エンジニア [2] => ブログ )
文字列のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
今回は文字列を分割するための関数に特化し、使い方を解説しました。
開発をしていると文字列の分割は様々なケースで使うため、この機会にぜひ覚えておきましょう!
もし、文字列の分割や文字数に関する操作を忘れてしまったら、この記事を思い出して下さい!