PHPで特定の文字列を検索して値と位置を取得する方法(strstr, strpos)

  • このエントリーをはてなブックマークに追加
  • Pocket

スポンサードリンク

PHPで特定の文字列を検索する関数にはstrstr()strpos()がよく使われます。

それぞれ文字列をそのまま返すか、文字列の位置を数字で返すかの違いがありますが、速度を優先するならstrpos()が良いでしょう。

 

strstr関数で特定の文字列を返す

特定の文字列が含まれていた場合、その文字列以降を全て返します。

見つからない場合はfalseを返します。

サンプル

以下のように表示

PHPのサンプルコードです。

解説

strstr(検索対象の文字列, 検索したい文字列);

検索対象の文字列の中から、実際に検索したい文字列を指定し、見つかったら検索する文字列以降全文を返します。

strpos関数で特定の文字列の位置を返す

特定の文字列が含まれていた場合、その文字列の位置を数字で返します。

見つからない場合はfalseを返します。

サンプル

以下のように表示

これはPHPのサンプルコードです。

検索する文字列が先頭にある場合エラーになる

上記の例だと、PHPという文字列が含まれていたら、変数$strに格納された文字列を表示させるというコードです。

しかし以下の例のように、検索する文字列が先頭にある場合、false判定となります。

文字列はありません。

上記の例だと、検索したい文字列PHPは文字列の先頭にあるため、0が返されます。

ただ、PHPは型指定をしないと0falseは同じ扱いとなるため、false判定となってしまいます。

検索したい文字列は存在しているのに、存在していないことになってしまうのです。

それじゃあ困るので、数値型の0とブーリアン型のfalseを区別する必要があります。

そのためには「型」が合っているかも判別すればいいので、型判定までを含めた!== false(falseじゃない場合は)という条件を加えれば、思うように動作してくれるでしょう。

PHPのサンプルコードです。

strpos()を使う場合は、型にも気を配りましょう。

日本語などのマルチバイト文字列には「mb_strpos」関数

strpos()は日本語などのマルチバイト文字列を上手く処理しきれません。

9

上記の例だと検索したいPHPという文字列は4文字目にあるため、0から始まり3という値が帰ってくることを期待しますが、実際は9という訳の分からない結果となります。

日本語などのマルチバイト文字列が含まれる場合は、mb_strpos()を使いましょう。

3

mb_strpos()は以下のように成り立っています。

mb_strpos(検索対象の文字列, 検索したい文字列, 検索開始位置(省略可), 文字コード(省略時は内部エンコーディングを使用));

日本語使用時は注意しましょう。

スポンサードリンク

  • このエントリーをはてなブックマークに追加
  • Pocket

コメントを残す

*