文字列の中の文字列を調べて条件分岐と配列を使う

strpos()とstripos()

構文は「strpos(対象文字列, 検索文字列 [, オフセット]);」で、stripos()も同様です。
検索文字列が最初に出現する位置を探しますが、stripos()では大文字小文字を区別しません。いずれも第三引数のオフセットにはオプションとして開始位置を指定することができます。マイナス指定した場合、その数に対応する分だけ末尾から戻った部分から検索を始めます。省略すると先頭から検索します。また、文字列の開始位置はオフセットとは関係なく、0からカウントされます。

strpos()

1
2
3
4
5
6
7
8
$str = "12345AXYZB678";
// 1以上であればtrue、0であればfalseという条件分岐
if(strpos($str, 'XYZ')){
echo '文字列「XYZ」は存在します。';
}else{
echo '文字列「XYZ」はありません。';
}
echo strpos($str, 'XYZ');
実行結果:文字列「XYZ」は存在します。6

stripos()

1
2
3
4
5
6
7
8
$str = "12345AXYZB678";
// 1以上であればtrue、0であればfalseという条件分岐
if(stripos($str, 'xyz')){
echo '文字列「XYZ」は存在します。';
}else{
echo '文字列「XYZ」はありません。';
}
echo stripos($str, 'XYZ');
実行結果:文字列「XYZ」は存在します。6

mb_strpos()

mb_strpos()の構文は「mb_strpos(対象文字列, 検索文字列 [, 開始位置, [エンコーディング]]);」です。
mb_strpos()は指定した検索文字列が対象文字列の最初に出現する位置を見つけます。この関数はstrpos()を拡張したもので、マルチバイトに対応しています。第四引数を省略すると内部文字エンコーディングを使います。検索文字列に数値を指定しても文字コードとして認識されません。開始位置にマイナスを設定すると末尾からのオフセットとなります。

1
2
3
4
5
6
7
8
$str = "大文字のABCを使ってみる。";
// 1以上であればtrue、0であればfalseという条件分岐
if(mb_strpos($str, 'ABC')){
echo '文字列「php」は存在します。';
echo mb_strpos($str, 'ABC');
}else{
echo '文字列「php」はありません。';
}
実行結果:文字列「php」は存在します。4

mb_strrpos()

mb_strrpos()の構文は「mb_strrpos(対象文字列, 検索文字列 [, オフセット, [エンコーディング]]);」です。
mb_strpos()は指定した検索文字列が対象文字列の最後に現れる位置を探します。最初の文字の位置は0、二番目の文字の位置は1というふうに先頭から順番にカウントします。第三引数を省略すると内部文字エンコーディングを使います。マルチバイトに対応しています。

1
2
$str = "大文字のABCを使ってみる。";
echo mb_strrpos($str, 'ABC');
実行結果:4

stripos()とmb_strpos()の使い方

以下はstripos()とmb_strpos()を条件分岐にかけて別途作成した配列から目的の値を取り出すサンプルの構文です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$a=array(
"jQuery" => "クライアントサイド",
"php" => "サーバサイド",
"css" => "クライアントサイド",
);
$b="php";
// stripos()
foreach($a as $key => $val){
if(stripos($key, $b) !== FALSE){
echo 'strposでは'.$key.':'.$val.'。';
}
}
// mb_strpos()
foreach($a as $key => $val){
if(mb_stripos($key, $b) !== FALSE){
echo 'mb_strposでは'.$key.':'.$val.'。';
}
}

実行結果:strposではphp:サーバサイド。mb_strposではphp:サーバサイド。

strspn()

strspn()の構文は「strspn(対象文字列, 指定文字 [, 開始位置, [長さ]]);」です。
strspn()は対象文字列の中から指定した文字以外の文字が初めに出現する位置を返します。また、最初の文字の位置は0となります。第三引数以降はオプションですが、開始位置を設定する場合、対象文字列の中の何番目(開始位置)から調べるかを指定できます。マイナスを指定すると最後尾から何番目かを設定できます。第四引数は開始位置からの長さを指定できます。マイナスにすると最後尾から遡ってカウントします。

1
2
3
print strspn("abcd9abcd", "abcd").'。';
print strspn("abc abcd9abcd", "abcd").'。';
print strspn("abc abcd9abcd", "ab").'。';
実行結果:4。3。2。

strcspn()

strcspn()の構文は「strcspn(対象文字列, 指定文字 [, 開始位置, [長さ]]);」です。
strcspn()は、対象文字列の中で指定した文字が最初に出現する位置を返します。

1
2
3
print strcspn("abcd9abcd", "d").'。';
print strcspn("abc abcd9abcd", "d9").'。';
print strcspn("abc abcd9abcd", "db").'。';
実行結果:3。7。1。