PHPで文字列を分解して配列で取得したい場合、preg_splitexplodestr_splitの3つの関数のどれを使えばいいのかいつも迷ってしまう。

なんとな〜く覚えているだけだと、なんども調べ直す羽目になってしまうので、これら3つの関数はそれぞれお何が違うのか、一度整理してみようと思います。

目次

preg_split() - 正規表現を使用できる

参考 : preg_split

正規表現で文字列を分割するための関数です。3つの関数の中では唯一正規表現を使用できます。

使用形式

preg_split($pattern , $subject [, $limit = -1 [, $flags = 0 ]])
引数 説明
$pattern (string) 検索するパターンを表す文字列。区切りキーワード
$subject (string) 分割したい文字列。
$limit (int) これを指定した場合、最大 $limit 個の部分文字列を返し、残りの文字列は最後の部分文字列に含めて返される。
$limit が -1、0 あるいは NULL の場合は制限なし。
$flags 次のフラグを組み合わせたものを指定できる。(ビット和演算子 | で組み合わせる)
PREG_SPLIT_NO_EMPTY

空文字列でないものだけが 返されるようになる。

PREG_SPLIT_DELIM_CAPTURE

文字列分割用パターンで、カッコによるサブパターンを使用するとその分割用パターン文字列も配列の要素に含まれるようになる。

PREG_SPLIT_OFFSET_CAPTURE

各マッチに対応する文字列のオフセット値も返されるようになる。 返り値の配列の各要素はさらに配列となり、[0] はマッチした文字列、 [1] は$subject におけるマッチした文字列のオフセット値。

 

戻り値

$patternにマッチした境界で分割した$subjectの部分文字列の 配列
マッチングに失敗した場合は、入力文字列そのままの、 要素が一つだけの配列を返します。

また、以下のような注意書きがありました。

正規表現の威力を必要としないのなら、より高速な (機能はシンプルですが) 代替関数として explode() あるいは str_split() のような選択肢があります。

つまり、正規表現が使えるけど、その分負担が大きいので必要のないときは無闇に使うな、ということみたいです。

explode() - 単純にキーワードで文字列を分解する

参考 : explode

文字列を、文字列のキーワードを元に分解する関数です。(「,」という文字列で分解したい場合など。)

使用形式

explode($delimiter , $string [, $limit = PHP_INT_MAX ])
引数 説明
$delimiter (string) 区切り文字列。
$string (string) 分割したい文字列。
$limit (int) 正の値が指定された場合、返される配列には 最大 $limit の要素が含まれ、$string の残りの部分は全て最後の要素含まれる。
負の場合、 最後の -$limit 個の要素を除く全ての構成要素が返される。(負の値はver.5.1.0以降で指定可能)
ゼロの場合は、1 を指定したものとみなされるので注意。

戻り値

$stringの内容を $delimiterで分割した文字列の配列

空の文字列 ("") が $delimiter として使用された場合、 explode() は FALSE を返します。$delimiter に引数 $string に含まれていない値が含まれている場合は、 $limit が負の値なら空の配列、そうでなければ 引数 $string を含む配列を返します。

str_split() - 文字数で分解する

参考 : str_split

文字列を、単純に文字数ごとに分割する関数。

使用形式

str_split($string [, $split_length = 1 ])
引数 説明
$string (string) 分割したい文字列。
$split_length (int) 分割する文字数の最大長。

戻り値

$split_lengthが指定されている場合、$split_lengthごとに文字列を分解した配列が返されます。
それ以外の場合は、1 文字ずつ分割された配列。

$split_length が 1 より小さい場合に FALSE を返します。$split_length が $string の長さより大きい場合、文字列全体が 最初の要素となる配列を返します。

まとめ

以上をまとめると、

preg_split()

正規表現が使える。複雑なパターン(タグなど)で文字列を分解したい場合に使用する

explode()

preg_splitより処理が早い。「,」や「/」など単純な文字列で分解したい場合はこっち。

str_split()

単純な文字数による分解。他の2つと機能的には全然違うのに、preg_split()と名前が似てるせいでややこしい。

といった感じでしょうか。

- Thank you for reading. -

あなたの1クリックが励みになります\( ̄ー ̄)/

コメント

コメントする

CAPTCHA


TOPへ Top