PHPで特定の文字列を検索する関数にはstrstr()
、strpos()
がよく使われます。
それぞれ文字列をそのまま返すか、文字列の位置を数字で返すかの違いがありますが、速度を優先するならstrpos()
が良いでしょう。
strstr関数で特定の文字列を返す
特定の文字列が含まれていた場合、その文字列以降を全て返します。
見つからない場合はfalse
を返します。
サンプル
1 2 |
$str = 'これはPHPのサンプルコードです。' echo strstr($str, 'PHP'); |
以下のように表示
PHPのサンプルコードです。
解説
strstr(検索対象の文字列, 検索したい文字列);
検索対象の文字列の中から、実際に検索したい文字列を指定し、見つかったら検索する文字列以降全文を返します。
strpos関数で特定の文字列の位置を返す
特定の文字列が含まれていた場合、その文字列の位置を数字で返します。
見つからない場合はfalse
を返します。
サンプル
1 2 3 4 5 6 7 |
$str = 'これはPHPのサンプルコードです。'; if(strpos($str, 'PHP')) { echo $str; } else { echo '文字列はありません。'; } |
以下のように表示
これはPHPのサンプルコードです。
検索する文字列が先頭にある場合エラーになる
上記の例だと、PHP
という文字列が含まれていたら、変数$str
に格納された文字列を表示させるというコードです。
しかし以下の例のように、検索する文字列が先頭にある場合、false
判定となります。
1 2 3 4 5 6 7 |
$str = 'PHPのサンプルコードです。'; if(strpos($str, 'PHP')) { echo $str; } else { echo '文字列はありません。'; } |
文字列はありません。
上記の例だと、検索したい文字列PHP
は文字列の先頭にあるため、0
が返されます。
ただ、PHPは型指定をしないと0
とfalse
は同じ扱いとなるため、false
判定となってしまいます。
検索したい文字列は存在しているのに、存在していないことになってしまうのです。
それじゃあ困るので、数値型の0
とブーリアン型のfalse
を区別する必要があります。
そのためには「型」が合っているかも判別すればいいので、型判定までを含めた!== false(falseじゃない場合は)という条件を加えれば、思うように動作してくれるでしょう。
1 2 3 4 5 6 7 |
$str = 'PHPのサンプルコードです。'; if(strpos($str, 'PHP') !== false) { echo $str; } else { echo '文字列はありません。'; } |
PHPのサンプルコードです。
strpos()
を使う場合は、型にも気を配りましょう。
日本語などのマルチバイト文字列には「mb_strpos」関数
strpos()
は日本語などのマルチバイト文字列を上手く処理しきれません。
1 2 |
$str = 'これはPHPのサンプルコードです。'; echo strpos($str, 'PHP'); |
9
上記の例だと検索したいPHP
という文字列は4文字目にあるため、0
から始まり3
という値が帰ってくることを期待しますが、実際は9
という訳の分からない結果となります。
日本語などのマルチバイト文字列が含まれる場合は、mb_strpos()
を使いましょう。
1 2 |
$str = 'これはPHPのサンプルコードです。'; echo mb_strpos($str, 'PHP', 0, UTF-8); |
3
mb_strpos()
は以下のように成り立っています。
mb_strpos(検索対象の文字列, 検索したい文字列, 検索開始位置(省略可), 文字コード(省略時は内部エンコーディングを使用));
日本語使用時は注意しましょう。