メニュー

WEBMEMOする。とあるクリエイターの個人的な備忘録。

PHPで文字列を分解したい場合、どうしますか?

さっと調べると、preg_splitexplodestr_splitの3つの関数が出てきます。

なんとな〜く覚えているだけだと、時間が空いた時にどの関数を使用すればいいのか迷うことがちょくちょくあったので、これら3つの関数の何が違うのかをまとめてみようと思います。

情報収集でお世話になったサイトはみなさんご存知、PHP.netです。

ではいきましょう。

目次

    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

    文字列を配列に変換する。

    explode()と違うのは、文字列をキーワードによって分解するのではなく、単純に文字数ごとに分割するという点です。

    ・使い方

    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 this to the end. -

    コメントする

    CAPTCHA


    TOPへ Top