[PHP] mb_strpos 文字列の位置を取得するサンプル

PHPの文字列の位置を取得するサンプルです。

確認環境
・PHP 7

目次

サンプル mb_strposとは
  前から検索する
  前から検索する+開始位置を指定
  mb_strrposとは
  後から検索する+開始位置を指定

mb_strposとは

mb_strpos ( string 対象の文字列 , string 検索する文字 [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] )
  • 文字列を前から検索して出現した位置(数値)を返します。
  • 先頭の1文字目の位置は0です。
  • 戻り値はintです。該当値がない場合はfalseです。
  • encodingを指定できます。省略した場合は、内部文字エンコーディングを使用します。
  • offsetは検索を始める位置です。省略可能です。
  • 日本語などのマルチバイト文字に対応しています。
  • マルチバイト文字を使用しない場合は、mb_が付かないstrpos関数を使用できます。

前から検索する

<?php
$a = "あいうあいう";
var_dump(mb_strpos($a, "あ")); //int(0)
var_dump(mb_strpos($a, "い")); //int(1)
var_dump(mb_strpos($a, "う")); //int(2)
var_dump(mb_strpos($a, "あいう")); //int(0)
var_dump(mb_strpos($a, "ん")); //bool(false)

$b = "abcabc";
var_dump(mb_strpos($b, "a")); //int(0)
var_dump(mb_strpos($b, "b")); //int(1)
var_dump(mb_strpos($b, "c")); //int(2)
var_dump(mb_strpos($b, "abc")); //int(0)
var_dump(mb_strpos($b, "z")); //bool(false)

2行目は、変数に文字列を代入しています。
3~6行目は、前から検索し引数の文字列が最初に見つかった位置を返しています。
7行目は、該当の文字がないのでfalseが返ります。

 

前から検索する+開始位置を指定

mb_strposの3つめの引数が検索開始位置になります。

<?php
$a = "あいうあいう";
var_dump(mb_strpos($a, "あ", 0)); //int(0)
var_dump(mb_strpos($a, "あ", 1)); //int(3)
var_dump(mb_strpos($a, "あ", 2)); //int(3)
var_dump(mb_strpos($a, "あ", 3)); //int(3)
var_dump(mb_strpos($a, "あ", 4)); //bool(false)
var_dump(mb_strpos($a, "あ", 5)); //bool(false)

3行目の引数は0で対象の文字列は(あいうあいう)です。位置の0が返ります。
4行目の引数は1で対象の文字列は(いうあいう)です。位置の3が返ります。
5行目の引数は2で対象の文字列は(うあいう)です。位置の3が返ります。
6行目の引数は3で対象の文字列は(あいう)です。位置の3が返ります。
7行目の引数は4で対象の文字列は(いう)です。文字(あ)はないのでfalseです。
8行目の引数は5で対象の文字列は(う)です。文字(あ)はないのでfalseです。

以下は、PHPマニュアルのmb-strpos関数のリンクです。
https://www.php.net/manual/ja/function.mb-strpos.php

 

mb_strrposとは

mb_strrpos ( string 対象の文字列 , string 検索する文字 [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] )
  • 文字列を後から検索して出現した位置(数値)を返します。
  • 先頭の1文字目の位置は0です。
  • 戻り値はintです。該当値がない場合はfalseです。
  • encodingを指定できます。省略した場合は、内部文字エンコーディングを使用します。
  • offsetは検索を始める位置です。省略可能です。
  • 日本語などのマルチバイト文字に対応しています。
  • マルチバイト文字を使用しない場合は、mb_が付かないstrrpos関数を使用できます。
<?php
$a = "あいうあいう";
var_dump(mb_strrpos($a, "あ")); //int(3)
var_dump(mb_strrpos($a, "い")); //int(4)
var_dump(mb_strrpos($a, "う")); //int(5)
var_dump(mb_strrpos($a, "あいう")); //int(3)
var_dump(mb_strrpos($a, "ん")); //bool(false)

$b = "abcabc";
var_dump(mb_strrpos($b, "a")); //int(3)
var_dump(mb_strrpos($b, "b")); //int(4)
var_dump(mb_strrpos($b, "c")); //int(5)
var_dump(mb_strrpos($b, "abc")); //int(3)
var_dump(mb_strrpos($b, "z")); //bool(false)

2行目は、変数に文字列を代入しています。
3~6行目は、後から検索し引数の文字列が最初に見つかった位置を返しています。
7行目は、該当の文字がないのでfalseが返ります。

 

後から検索する+開始位置を指定

mb_strrpos関数の3つめの引数が検索開始位置になります。

<?php
$a = "あいうあいう";
var_dump(mb_strrpos($a, "あ", 5)); //bool(false)
var_dump(mb_strrpos($a, "あ", 4)); //bool(false)
var_dump(mb_strrpos($a, "あ", 3)); //int(3)
var_dump(mb_strrpos($a, "あ", 2)); //int(3)
var_dump(mb_strrpos($a, "あ", 1)); //int(3)
var_dump(mb_strrpos($a, "あ", 0)); //int(3)

3行目の引数は5で対象の文字列は(う)です。文字(あ)はないのでfalseです。
4行目の引数は4で対象の文字列は(いう)です。文字(あ)はないのでfalseです。
5行目の引数は3で対象の文字列は(あいう)です。位置の3が返ります。
6行目の引数は2で対象の文字列は(うあいう)です。位置の3が返ります。
7行目の引数は1で対象の文字列は(いうあいう)です。位置の3が返ります。
8行目の引数は0で対象の文字列は(あいうあいう)です。位置の3が返ります。

以下は、PHPマニュアルのmb_strrpos関数のリンクです。
https://www.php.net/manual/ja/function.mb-strrpos.php

関連の記事

PHP 文字列の値を比較するサンプル(strcmp)
[PHP] mb_strlen 文字列の長さを取得する
[PHP] mb_substr 文字列を切り出すサンプル

△上に戻る