PHP入門 文字列関数 特定の文字位置を検索する(mb_strpos/mb_strrpos関数)

ある文字列の中で特定の部分文字列が登場する文字位置を取得するには、mb_strpos/mb_strrpos関数を利用します。

構文:mb_strpos/mb_strrpos関数

mb_strpos(string $haystack, string $needle [, int $offset [, ?string $encoding]]):int|false
mb_strrpos(string $haystack, string $needle [, int $offset [, ?string $encoding]]):int|false
$haystack検索対象の文字列
$needle検索文字列
$offset検索開始位置
$encoding使用する文字エンコーディング(省略時はdefault_charsetパラメーターの値)

mb_strpos関数とmb_strrpos関数との違いは、検索文字列が最初に現れた位置を返すか(mb_strpos関数)、最後に現れた位置を返すか(mb_strrpos関数)です。mb_strpos/mb_strrpos関数のいずれも、部分文字列が見つからなかった場合にはfalseを、見つかった場合には先頭文字を0とした場合の文字位置を返します。引数$offsetの考え方は、mb_substr関数のそれと同じで、負数であれば文字列末尾からの文字数を表します。mb_strrpos関数であれば、その位置の直前で検索を終了します。

<?php 
  $str = 'お向かいのにわには、にわとりが離し飼いになっている。';
  print mb_strpos($str , 'にわ').'<br>';      //結果:5
  print mb_strpos($str , 'にわ',6).'<br>';    //結果:10
  print mb_strpos($str , 'にわ',-10).'<br>';  //結果:10
  print mb_strpos($str , 'かに').'<br>';      //結果:false(表示されない)

  print mb_strrpos($str , 'にわ').'<br>';      //結果:10
  print mb_strrpos($str , 'にわ',-20).'<br>';  //結果:5

単に文字列が含まれているかどうは、mb_strpos/mb_strrpos関数の戻り値がfalseであるかどうかで判定できます。

文字列の大文字/小文字を区別しないmb_stripos/mb_strripos関数もあります。構文は、mb_strpos/mb_strrpos関数と同じです。