PHP 文字列を検索する

文字列を関数mb_strposで検索する

PHPで文字を検索するには関数mb_strposをつかいます。

mb_strpos(対象文字列, 検索文字列, 検索開始位置, エンコード);

対象文字列
検索の対象となる文字列をかきます。
検索文字列
検索する文字列をかきます。
検索開始位置(省略可能)
文字列を検索する開始位置を整数でかきます。
正の数字をかくと、開始位置が文字列の先頭からになり、先頭の位置は「0」になります。
負の数字をかくと、開始位置が文字列の末尾からになり、末尾の位置は「-1」になります。
省略すると「0」になります。
エンコード(省略可能)
文字のエンコーディングをかきます。
省略すると「内部文字エンコーディング」になります。

検索開始位置を省略した場合

$str = 'イチゴとミカンとモモ';
print mb_strpos($str, 'イチゴ'); // 結果:0
print mb_strpos($str, 'ミカン'); // 結果:4
print mb_strpos($str, 'モモ');    // 結果:8

検索開始位置を省略しているので、$strの0番目の文字(先頭)から検索します。
検索した文字列が見つかった場合、最初の位置が返されます。
$strからイチゴを検索します。イチゴ$strの0番目からはじまるので0を返します。
$strからミカンを検索します。ミカン$strの4番目からはじまるので4を返します。
$strからモモを検索します。モモ$strの8番目からはじまるので8を返します。

検索開始位置に正の数字を書いた場合

検索開始位置に正の数字をかくと、先頭から何番目の文字を検索開始位置にするかになります。
例えば2とかくと先頭から3文字目が検索開始位置になります。
正の数字は文字列の先頭が0からはじまります。

$str = 'イチゴとミカン';
print mb_strpos($str, 'ミカン', 0); // 結果:4
print mb_strpos($str, 'ミカン', 1); // 結果:4
print mb_strpos($str, 'ミカン', 2); // 結果:4
print mb_strpos($str, 'ミカン', 3); // 結果:4
print mb_strpos($str, 'ミカン', 4); // 結果:4
print mb_strpos($str, 'ミカン', 5); // 結果:表示されない
print mb_strpos($str, 'ミカン', 6); // 結果:表示されない

先頭から0番目の文字よりあとの「イチゴとミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
先頭から1番目の文字よりあとの「チゴとミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
先頭から2番目の文字よりあとの「ゴとミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
先頭から3番目の文字よりあとの「とミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
先頭から4番目の文字よりあとの「ミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
先頭から5番目の文字よりあとの「カン」が対象の文字列になり、ミカンは含まれないため表示されません。
先頭から6番目の文字よりあとの「ン」が対象の文字列になり、ミカンは含まれないため表示されません。

文字列を後ろから検索する

検索開始位置に負の数字をかくと、末尾から何番目の文字を検索開始位置にするかになります。
例えば-2をかくと末尾から2文字戻った文字が検索開始位置になります。
正の数字は0からはじまりましたが、負の数字は文字列の末尾が-1からはじまります。

$str = 'イチゴとミカン';
print mb_strpos($str, 'ミカン', -1); // 結果:表示されない
print mb_strpos($str, 'ミカン', -2); // 結果:表示されない
print mb_strpos($str, 'ミカン', -3); // 結果:4
print mb_strpos($str, 'ミカン', -4); // 結果:4
print mb_strpos($str, 'ミカン', -5); // 結果:4
print mb_strpos($str, 'ミカン', -6); // 結果:4
print mb_strpos($str, 'ミカン', -7); // 結果:4

末尾から-1番目の文字よりあとの「ン」が対象の文字列になり、ミカンは含まれないため表示されません。
末尾から-2番目の文字よりあとの「カン」が対象の文字列になり、ミカンは含まれないため表示されません。
末尾から-3番目の文字よりあとの「ミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
末尾から-4番目の文字よりあとの「とミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
末尾から-5番目の文字よりあとの「ゴとミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
末尾から-6番目の文字よりあとの「チゴとミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。
末尾から-7番目の文字よりあとの「イチゴとミカン」が対象の文字列になり、ミカンは全体の文字列('イチゴとミカン')の4番目から始まるので4を返します。

検索文字列が対象の文字列にないときは表示されない

検索する文字列が対象の文字列にないとき、結果には何も表示されずfalseを返します。

$文字列 = 'イチゴとミカンとモモ';
$結果 = mb_strpos($文字列, 'ナシ');
print $結果; // 結果:表示されない var_dump ($結果); // 結果:bool(false)

$文字列ナシが見つからないため、結果にはなにも表示されません。
関数var_dumpで表示すると、bool(false)と表示されfalseを返していることがわかります。

「 検索したい文字列 」が「 対象の文字列 」に複数ある場合

検索したい文字列が対象の文字列に複数あった場合、対象の文字列の最初の検索したい文字列の位置を返します。

$文字列 = 'イチゴとイチゴ';
print mb_strpos($文字列, 'イチゴ', 0); // 結果:0 print mb_strpos($文字列, 'イチゴ', 1); // 結果:4 print mb_strpos($文字列, 'イチゴ', 2); // 結果:4 print mb_strpos($文字列, 'イチゴ', 3); // 結果:4 print mb_strpos($文字列, 'イチゴ', 4); // 結果:4 print mb_strpos($文字列, 'イチゴ', 5); // 結果:表示されない print mb_strpos($文字列, 'イチゴ', 6); // 結果:表示されない

先頭から0番目の文字よりあとの「イチゴとイチゴ」が対象の文字列になります。
対象の文字列で最初のイチゴの位置は全体の文字列(イチゴとイチゴ)の0番目なので0を返します。
先頭から1番目の文字よりあとの「チゴとイチゴ」が対象の文字列になります。
対象の文字列で最初のイチゴの位置は全体の文字列(イチゴとイチゴ)の4番目なので4を返します。
先頭から2番目の文字よりあとの「ゴとイチゴ」が対象の文字列になります。
対象の文字列で最初のイチゴの位置は全体の文字列(イチゴとイチゴ)の4番目なので4を返します。
先頭から3番目の文字よりあとの「とイチゴ」が対象の文字列になります。
対象の文字列で最初のイチゴの位置は全体の文字列(イチゴとイチゴ)の4番目なので4を返します。
先頭から4番目の文字よりあとの「イチゴ」が対象の文字列になります。
対象の文字列で最初のイチゴの位置は全体の文字列(イチゴとイチゴ)の4番目なので4を返します。
先頭から5番目の文字よりあとの「チゴ」が対象の文字列になります。
対象の文字列にイチゴは含まれないため表示されません。
先頭から6番目の文字よりあとの「ゴ」が対象の文字列になります。
対象の文字列にイチゴは含まれないため表示されません。