[PHP] 指定した文字列が2番目に現れる位置を見つける

公開

スポンサーリンク

strpos()は文字列の中に指定した文字列が最初に現れる位置を見つける関数です。マルチバイト文字列の場合はmb_strpos()を使います。

$str = "abcdeabcde";
$search = "c";
echo strpos($str, $search);//2

このように”abcdeabcde”という文字列から、”c”という文字列が初めに出現する位置を探します。”c”は3番目にありますので、返り値は2です(文字列の1番目が0)。

では指定した文字が2番目に出現する位置を探したい場合はどうすれば良いでしょうか? 上の例では、2番目に”c”が出現するのは8文字目(返り値は7)です。

strpos()及びmb_strpos()は第3引数に、探索を開始する位置を指定することができます。ですから、1番目の文字が出現した位置をまず求め、それに1を足した数値を引数に与えれば、”c”が2番目に出現する位置を探すことができます。

$str = "abcdeabcde";
$search = "c";
echo strpos($str, $search, strpos($str, $search)+1 );//7

最近、文章中の2番目に出現する読点までを要約として表示する必要があったのですが、そういった用途の際に有用です。

$str = "なんたらかんたら。どうでこうで。";
$search = "。";
$num = mb_strpos($str, $search, mb_strpos($str, $search)+1 );//15
echo !$num ? $str : mb_substr($str, 0, $num);//探索対象の文字が1個以下の場合$numは0なので, その場合は全文を表示している

なお、文字が見つからなかった場合はfalseが返ってきます。探索対象が1番目に出現する場合の返り値は0ですので、0falseを区別するために、判定は厳密に行う必要があります。

文字が最後に出現する位置を得たい場合はmb_strrpos()という関数がありますので、そちらを使います。

スポンサーリンク


Comment