・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年6月12日に投稿されました。)
PHPで特定の文字列を検索するにはstrpos()を使用します。
strpos()とは指定した文字列が最初に表示される場所をインデックスで取得する関数になります。
インデックスは「0」を始めとして、左から右へ数えていくようになりますので、3番目にある場合は「2」となります。
そして、if文の条件文としてstrpos()を使用した場合、見つかった場合はtrueを、見つからなかった場合はfalseを通るようになります。
また、同じ文字だとしても大文字と小文字は区別されますので、注意が必要です。
今回はPHPのstrpos()で検索した文字列が最初に現れる位置を取得する方法について紹介していきます。
strpos()とは
冒頭でも紹介しましたが、strpos()とは検索したい文字列を対象の文字列の中から最初に現れる場所を探す関数となります。
最初の場所を見つけることから、見つけた場所のインデックスを返すようになります。
しかし、インデックスは1からではなく0からスタートになりますので、注意してください。
strpos()の書き方
strpos()の書き方は下記のようになります。
1 | <?php strpos('検索対象の文字列', '検索する文字列'[, '検索開始位置']); ?> |
strpos()の中にパラメータを必ず2つ指定する必要がありますが、最大3つまで指定することができます。
strpos()のパラメータ
strpos()で指定するパラメータは下記のようになります。
- 検索対象の文字列(必須)
検索を対象とする文字列を指定する - 検索する文字列(必須)
検索したい文字列を指定する - 検索開始位置(任意)
検索開始位置をインデックスで指定する(スタートが0)
1つ目のパラメータは検索対象となる文字列を指定し、2つ目のパラメータは検索したい文字列を指定します。
そして、3つ目は指定してもしなくてもどちらでも構いませんが、検索対象の文字列の検索開始位置を指定することができます。
strpos()で検索した文字列が最初に現れる位置を取得するサンプルコード
strpos()で特定の文字列を検索するサンプルコードをご紹介します。
ここでは下記の3つの場合でstrpos()を使用してみます。
- 検索した文字列が見つかった場合
- 検索した文字列が見つからなかった場合
- 検索する文字列を大文字や小文字にした場合
検索した文字列が見つかった場合
検索した文字列が見つかった場合に、strpos()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $text1 = 'Good morning!'; echo '・検索対象の文字列: '.$text1; $search1 = 'm'; echo '・検索する文字列:' .$search1; $serachText1 = strpos($text1, $search1); echo 'strpos()で特定の文字列を検索した結果: '. $serachText1; if($serachText1) { echo 'if文の条件式に使用した結果: trueです。'; } else{ echo 'if文の条件式に使用した結果: falseです。'; } ?> |
実行結果
「m」の文字列が見つかったため、インデックスとして「5」が返されています。
そして、if文の条件文として使用した場合は、trueの処理が行われています。
検索した文字列が見つからなかった場合
検索した文字列が見つからなかった場合に、strpos()を使用してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $text2 = 'Good morning!'; echo '・検索対象の文字列: '.$text2; $search2 = 'a'; echo '・検索する文字列:' .$search2; $serachText2 = strpos($text2, $search2); echo 'strpos()で特定の文字列を検索した結果: '. $serachText2; if($serachText2) { echo 'if文の条件式に使用した結果: trueです。'; } else{ echo 'if文の条件式に使用した結果: falseです。'; } ?> |
実行結果
「a」の文字列がなかったため、何も表示されていません。
また、if文の条件文として使用した場合は、falseの処理が行われています。
検索する文字列を大文字や小文字にした場合
検索する文字列を大文字や小文字にした場合に、strpos()を使用してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php $text3 = 'Good morning!'; echo '・検索対象の文字列: '.$text3; $search3 = 'MORNING'; echo '・検索する文字列:' .$search3; $serachText3 = strpos($text3, $search3); echo 'strpos()で特定の文字列を検索した結果: '. $serachText3; if($serachText3) { echo 'if文の条件式に使用した結果: trueです。'; } else{ echo 'if文の条件式に使用した結果: falseです。'; } ?> |
実行結果
同じ文字列がありますが、小文字であるため違う文字列だと認識されています。
そのため、大文字と小文字は区別されてしまいます。
検索開始位置を指定してstrpos()で検索した文字列が最初に現れる位置を取得するサンプルコード
続いて、検索開始位置を指定してstrpos()で特定の文字列を検索するサンプルコードについてご紹介していきます。
検索開始位置を指定するため、strpos()に検索開始位置のパラメータを指定します。
ここでは下記の2つの場合でstrops()を使用してみます。
- 検索開始位置に正の整数を指定した場合
- 検索開始位置に負の整数を指定した場合
検索開始位置に正の整数を指定した場合
検索開始位置に正の整数を指定した場合に、strpos()を使用してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $text4 = 'Good morning everyone!'; echo '・検索対象の文字列: '.$text4; $search4 = 'o'; echo '・検索する文字列:' .$search4; $serachText4 = strpos($text4, $search4, '8'); echo 'strpos()で特定の文字列を検索した結果: '. $serachText4; if($serachText4) { echo 'if文の条件式に使用した結果: trueです。'; } else{ echo 'if文の条件式に使用した結果: falseです。'; } ?> |
実行結果
正の整数を指定すると、文字列の頭から数えた位置をスタート地点として文字列を検索するようになります。
そのため、「eveyone」の「o」のインデックスである「18」が返されています。
また、if文ではtrueの処理が行われています。
検索開始位置に負の整数を指定した場合
検索開始位置に負の整数を指定した場合に、strpos()を使用してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $text5 = 'Good morning everyone!'; echo '・検索対象の文字列: '.$text5; $search5 = 'G'; echo '・検索する文字列:' .$search5; $serachText5 = strpos($text5, $search5, '-6'); echo 'strpos()で特定の文字列を検索した結果: '. $serachText5; if($serachText5) { echo 'if文の条件式に使用した結果: trueです。'; } else{ echo 'if文の条件式に使用した結果: falseです。'; } ?> |
実行結果
負の整数を指定すると、文字列の末尾から数えた位置をスタート地点として文字列を検索するようになります。
そのため、「Good」の「G」の文字列は検索対象外となり、何も返されません。
また、if文ではfalseの処理が行われています。
strpos()を使用する際の注意点
strpos()は、使用する際に注意しなければならない点があります。
それは、下記の2点です。
⚫︎ マルチバイト文字列を検索すると取得するインデックスがずれる
if文を使用する際に1番目を取得するとfalseを通ってしまう
まず1つ目は、if文を使用する際に1番目を取得するとfalseを通ってしまうということです。
例えば、下記のコードを見てください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $text6_1 = 'りんごぶとうばなないちご'; $serachText6 = strpos($text6_1, 'りんご'); echo '・検索結果: '. $serachText6_1; if($serachText6_1) { echo '見つかりました。'; } else{ echo '見つかりませんでした。'; } ?> |
実行結果
strpos()で0が返される場合、文頭で文字列が見つかったのでtrueを通ると思いがちですが、プログラム的には「0」は無かったと認識しますので、falseを通ってしまうのです。
そのため、下記のコードのように修正する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php $text6_2 = 'りんごぶとうばなないちご'; $serachText6_2 = strpos($text6_2, 'りんご'); echo '・検索結果: '. $serachText6_2; if($serachText6_2 != '') { echo '見つかりました。'; } else{ echo '見つかりませんでした。'; } ?> |
実行結果
「!=(不等価演算子)」を使用することで、文頭に文字が見つかってもtrueを通るようになります。
マルチバイト文字列を検索すると取得するインデックスがずれる
そして、2つ目はマルチバイト文字列を検索すると取得するインデックスがずれるということです。
マルチバイト文字列とは、ひらがなやカタカナのような文字列であり、それらを検索しようとすると取得するインデックスがずれてしまいます。
例えば、下記のコードを見てください。
1 2 3 4 5 6 7 8 9 10 | <?php $text7_1 = 'りんごぶどうばなないちご'; echo '・検索対象の文字列: '. $text7_1; $search7_1 = 'ぶどう'; echo '・検索文字列: '. $search7_1; $serachText7_1 = strpos($text7_1, $search7_1); echo '・検索結果: '. $serachText7_1; ?> |
実行結果
「ぶどう」という文字は4番目にあるので「3」が返ってくるかと思いがちですが、「9」が表示されています。
そのため、下記のコードのように修正します。
1 2 3 4 5 6 7 8 9 10 | <?php $text7_2 = 'りんごぶどうばなないちご'; echo '・検索対象の文字列: '. $text7_2; $search7_2 = 'ぶどう'; echo '・検索文字列: '. $search7_2; $serachText7_2 = mb_strpos($text7_2, $search7_2); echo '・検索結果: '. $serachText7_2; ?> |
実行結果
mb_strpos()を使用することで、マルチバイト文字列のインデックスを正確に取得することができます。
もし、mb_strpos()について詳しく知りたい場合は下記の記事をご参考ください。
検索した文字列が最後に現れる位置を取得する場合
検索した文字列が最後に現れる位置を取得する場合はstrrpos()を使用します。
そのため、strpos()とは対になる関数となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $text8 = 'Good morning everyone! Good morning everyone!'; echo '・検索対象の文字列: '.$text8; $search8 = 'Good'; echo '・検索する文字列:' .$search8; $serachText8 = strrpos($text8, $search8); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText8; if($serachText8) { echo 'if文の条件式に使用した結果: trueです。'; } else{ echo 'if文の条件式に使用した結果: falseです。'; } ?> |
実行結果
PHPで特定の文字列を検索する関数の一覧
PHPでは、特定の文字列を検索する関数はstrpos()以外にも存在します。
例えば、先ほどご紹介したstrrpos()関数もあれば、検索文字列が最初に現れる位置から末尾の文字列を返す、strchr()関数などがあります。
ここではご紹介しませんがもし、詳しく知りたい場合は下記の記事をご参考ください。
【PHP】特定の文字列を検索する方法の一覧!まとめ
⚫︎ strpos()とは検索したい文字列を対象の文字列の中から最初に現れる場所を探す関数である
⚫︎ strpos()のパラメータは2つ必須だが、最大3つまで指定できる
・ 検索対象の文字列(必須)
・ 検索する文字列(必須)
・ 検索開始位置(任意)
⚫︎ 検索した文字列が見つかった場合は、見つかった位置をインデックス(0がスタート)で返す
⚫︎ 検索した文字列が見つからなかった場合は、値としては何も返されない
⚫︎ 検索する文字列を大文字や小文字にした場合は、値としては何も返されない
(大文字と小文字は区別される)
⚫︎ 検索開始位置に正の整数を指定した場合、文字列の頭から数えた位置をスタート地点として文字列を検索する
⚫︎ 検索開始位置に負の整数を指定した場合、文字列の末から数えた位置をスタート地点として文字列を検索する
⚫︎ strpos()を使用する際の注意点として、下記の2点がある
・ 0番目を取得した場合にif文を使用するとfalseを通ってしまう
・ マルチバイト文字列を検索すると取得するインデックスがずれる
⚫︎ 検索した文字列が最後に現れる位置を取得する場合はstrrpos()を使用する