strpos
このページでは豊富な例を用いてPHPのstrpos関数の使い方を学ぶことができます。
strpos関数は文字列内に「特定の文字列」が含まれているかどうかを検索し、
最初に「特定の文字列」が現れた「検索された文字列内のインデックス」を戻り値として返します。
検索する文字列が存在しない場合、false
が戻り値となります。
また、第3引数を指定することにより、検索を開始する位置を決めることもできます。
// 定義
strpos ( string $haystack , string $needle , int $offset = 0 ) : int|false
TL;DR
基本
// 第1引数に「検索される文字列」、第2引数に「検索対象の文字列」を指定する
$string1 = 'PHP';
$returnValue1 = strpos($string1, 'H');
print_r($returnValue1);
==> 1
// 戻り値はint型
var_dump($returnValue1);
==> int(1)
// 戻り値が正しいか確かめる
print_r($string1[$returnValue1]);
==> H
// 戻り値は「検索対象の文字列」が最初に現れる位置のインデックス
$string2 = 'PHP! PHP! PHP!';
$returnValue2 = strpos($string2, 'PHP');
print_r($returnValue2);
==> 0
// 検索対象の文字列が含まれない場合はfalseが戻り値
$string3 = 'I love PHP!';
$returnValue3 = strpos($string3, 'JavaScript');
var_dump($returnValue3);
==> bool(false)
// strposは大文字・小文字を区別して検索する
$string4 = 'I love PHP!';
$returnValue4 = strpos($string4, 'php');
var_dump($returnValue4);
==> bool(false)
検索開始位置の指定
// 通常の使用方法
$string1 = 'I like PHP.';
$returnValue1 = strpos($string1, 'P',);
print_r($returnValue1);
==> 7
// 第3引数を指定すると検索開始位置を指定できる
$string2 = 'I like PHP.';
$returnValue2 = strpos($string2, 'P', 8);
print_r($returnValue2);
==> 9
$string3 = 'php,php,php,php';
$returnValue3 = strpos($string3, 'php', 1);
print_r($returnValue3);
==> 4
// 負の値の場合は末尾から-n個戻った位置から検索する
$string4 = 'php,php,php,php';
$returnValue4 = strpos($string4, 'php', -5);
print_r($returnValue4);
==> 12
特定の文字列を含むかどうかの判定
// 「検索対象の文字列」が含まれているかのチェック
// 含まれている場合、strpos関数の戻り値はint型
$searchedString1 = 'I have a pen';
if (strpos($searchedString1, 'pen') !== false) {
echo "'pen' is FOUND!";
echo PHP_EOL;
} else {
echo "NO 'pen'.";
}
==> 'pen' is FOUND!
// 「検索対象の文字列」が含まれていない場合
// falseが返り、else以降の処理が実行される
$searchedString2 = 'I have a pen';
if (strpos($searchedString2, 'apple') !== false) {
echo "'pen' is FOUND!";
} else {
echo "NO 'pen'.";
echo PHP_EOL;
}
==> NO 'pen'.
解説
// 定義
strpos ( string $haystack , string $needle , int $offset = 0 ) : int|false
基本
strpos関数は「第1引数に与えた文字列」に対して「第2引数に与えた文字列」を検索し、
「第2引数に与えた文字列」が含まれるている場合に「第1引数に与えた文字列」内でのインデックス(整数、int型)を戻り値として返します。
「第2引数に与えた文字列」が含まれていない場合はfalse
が戻り値となります。
「第1引数に与えた文字列」に「第2引数に与えた文字列」が複数含まれている場合、最初の文字列のインデックスが返ります。
$string1 = 'Apple';
$returnValue1 = strpos($string1, 'e');
print_r($returnValue1);
==> 4
// 戻り値はint型
var_dump($returnValue1);
==> int(4)
// 戻り値が正しいか確かめる
print_r($string1[$returnValue1]);
==> e
// 戻り値は「検索対象の文字列(第2引数)」が最初に現れる位置のインデックス
$string2 = 'Apple';
$returnValue2 = strpos($string2, 'p');
print_r($returnValue2);
==> 1
// 「検索対象の文字列」が含まれない場合はfalseが戻り値
$string3 = 'I have a pen.';
$returnValue3 = strpos($string3, 'pineapple');
var_dump($returnValue3);
==> bool(false)
// strposは大文字・小文字を区別して検索する
$string4 = 'I have a pen.';
$returnValue4 = strpos($string4, 'pen');
print_r($returnValue4);
==> 9
$returnValue5 = strpos($string4, 'PEN');
var_dump($returnValue5);
==> bool(false)
検索開始位置の指定
第3引数は任意指定の引数で、整数(int型)を指定します。
第3引数を呼び出し時に与えることで、
第1引数で与えた文字列のどのインデックス位置から検索を開始するのかを指定することができます。
負の整数を指定した場合、検索される文字列の末尾から-n
だけ戻った位置から検索を開始します。
// 第3引数を使用しない場合
$string1 = 'kiwi';
$returnValue1 = strpos($string1, 'i');
print_r($returnValue1);
==> 1
// 第3引数を使用する場合
$string2 = 'kiwi';
$returnValue2 = strpos($string2, 'i', 2);
print_r($returnValue2);
==> 3
// 負の値を指定した場合
$string3 = 'pen pineapple apple pen';
$returnValue3 = strpos($string3, 'apple', -10);
print_r($returnValue3);
==> 14
特定の文字列を含むかどうかの判定
strpos関数は、「第1引数の文字列」に「第2引数の文字列」が含まれなかった場合にfalse
を返します。
この特徴を利用し、if文などと組み合わせて特定の文字列を含むかどうかの判定をすることができます。
$searchedString1 = 'php';
if (strpos($searchedString1, 'php') !== false) {
echo "'php' is FOUND!";
echo PHP_EOL;
} else {
echo "NO 'php'.";
}
==> 'php' is FOUND!
// 「検索対象の文字列」が含まれていない場合
$searchedString2 = 'php';
if (strpos($searchedString2, 'ppap') !== false) {
echo "'php' is FOUND!";
} else {
echo "NO 'php'.";
echo PHP_EOL;
}
==> NO 'php'.