・IT/Web系エンジニアの経験者の方
・どこの転職エージェントを利用しようか迷っている方
それなら、キッカケエージェントにご相談!
キッカケエージェントでは、少数精鋭のエージェントが、エンジニアの経験やスキル、志向性などをカウンセリングし、的確なアドバイスを提供します!
また、徹底した企業へのヒアリングにより、最適なマッチングを実現し、今では内定率が一般的なエージェントの2倍以上となっています!
転職エージェントに迷っている方、まずは無料でキャリア相談から!
(この記事は2022年6月17日に投稿されました。)
PHPでは文字列を検索する関数としてstrrpos()があります。
strrpos()とは指定した文字列が最後に表示される場所をインデックスで取得する関数になります。
そのため、同じ文字列が複数あったとしても、文末の近くに現れている文字列のインデックスを取得するようになります。
そして、if文の条件文としてstrrpos()を使用した場合、見つかった場合はtrueを、見つからなかった場合はfalseを通るようになります。
また、strrpos()はstrpos()と対になる関数になるのですが3つ目のパラメータを使用した場合、両関数で動きが異なりますので注意が必要です。
今回はPHPのstrrpos()で検索した文字列が最後に現れる位置を取得する方法について紹介していきます。
strrpos()とは
冒頭でも紹介しましたが、strrpos()とは検索したい文字列を対象の文字列の中から最後に現れる位置を探す関数となります。
そのため、返り値としては検索した文字列の位置をインデックスとして返すようになります。
strrpos()の書き方
strrpos()の書き方は下記のようになります。
1 | <?php strrpos('検索対象の文字列', '検索する文字列'[, '検索開始位置']); ?> |
strrpos()の中にパラメータを必ず2つ指定する必要がありますが、最大3つまで指定することができます。
strrpos()のパラメータ
strrpos()で指定するパラメータは下記のようになります。
- 検索対象の文字列(必須)
検索を対象とする文字列を指定する - 検索する文字列(必須)
検索したい文字列を指定する - 検索開始位置(任意)
検索開始位置をインデックスで指定する(スタートが0)
1つ目のパラメータは検索対象となる文字列を指定し、2つ目のパラメータは検索したい文字列を指定します。
そして、3つ目は指定してもしなくてもどちらでも構いませんが、検索対象の文字列の検索開始位置を数値で指定することができます。
strrpos()で検索した文字列が最後に現れる位置を取得するサンプルコード
strrpos()で特定の文字列を検索するサンプルコードをご紹介します。
ここでは下記の3つの場合でstrops()を使用してみます。
- 検索した文字列が見つかった場合
- 検索した文字列が見つからなかった場合
- 検索する文字列を大文字や小文字にした場合
検索した文字列が見つかった場合
検索した文字列が見つかった場合にstrrpos()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 | <?php $text1 = 'Good afternoon! Good afternoon!'; echo '・検索対象の文字列: '.$text1; $search1 = 'afternoon'; echo '・検索する文字列:' .$search1; $serachText1 = strrpos($text1, $search1); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText1; ?> |
実行結果
「afternoon」という文字列がありますが、strrpos()によって最後に現れる文字列のインデックスを取得しています
そのため、結果としては「21」が表示されます。
検索した文字列が見つからなかった場合
検索した文字列が見つからなかった場合にstrrpos()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 | <?php $text2 = 'Good afternoon! Good afternoon!'; echo '・検索対象の文字列: '.$text2; $search2 = 'morning'; echo '・検索する文字列:' .$search2; $serachText2 = strrpos($text2, $search2); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText2; ?> |
実行結果
「morning」の文字列がなかったため、strrpos()では何も返されません。
そのため、結果としては空が表示されます。
検索する文字列を大文字や小文字にした場合
検索する文字列を大文字や小文字にした場合にstrrpos()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 | <?php $text3 = 'Good afternoon! Good afternoon!'; echo '・検索対象の文字列: '.$text3; $search3 = 'GOOD AFTERNOON'; echo '・検索する文字列:' .$search3; $serachText3 = strrpos($text3, $search3); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText3; ?> |
実行結果
「Good afternoon」の大文字の文字列がなかったため、strrpos()では何も返されません。
そのため、strrpos()では同じ文字列でも大文字と小文字では区別されます。
検索開始位置を指定してstrrpos()で検索した文字列が最後に現れる位置を取得するサンプルコード
続いて、検索開始位置を指定してstrrpos()で特定の文字列を検索するサンプルコードについてご紹介していきます。
検索開始位置を指定するため、strrpos()に検索開始位置のパラメータを指定します。
ここでは下記の2つの場合でstrrpos()を使用してみます。
- 検索開始位置に正の整数を指定して文字列を検索した場合
- 検索開始位置に負の整数を指定して文字列を検索した場合
検索開始位置に正の整数を指定して文字列を検索した場合
検索開始位置に正の整数を指定して文字列を検索した場合にstrrpos()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 | <?php $text4 = 'Good afternoon everyone! Good afternoon everyone!'; echo '・検索対象の文字列: '.$text4; $search4 = 'o'; echo '・検索する文字列:' .$search4; $serachText4 = strrpos($text4, $search4, 9); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText4; ?> |
実行結果
検索開始位置に正の数を指定すると、文頭から数えた位置をスタート地点として文字列を検索するようになります。
そのため、2つ目の「everyone」の「o」のインデックスである「45」が返されてます。
検索対象となるのは「rnoon everyone! Good afternoon everyone!」となります。
検索開始位置に負の整数を指定して文字列を検索した場合
検索開始位置に負の整数を指定して文字列を検索した場合にstrrpos()を使用してみます。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 | <?php $text5 = 'Good afternoon everyone! Good afternoon everyone!'; echo '・検索対象の文字列: '.$text5; $search5 = 'o'; echo '・検索する文字列:' .$search5; $serachText5 = strrpos($text5, $search5, '-9'); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText5; ?> |
実行結果
検索開始位置に負の数を指定すると、文頭をスタート地点として文字列の末尾から数えた位置までの文字列を検索するようになります。
そのため、2つ目の「everyone」は対象外となり、2つ目の「afternoon」の「o」のインデックスである「37」が返されてます。
検索対象となるのは「Good afternoon everyone! Good afternoon 」となります。
strrpos()をif文の条件式として使用した場合
strrpos()をif文の条件式として使用した場合についてご紹介します。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php $text6 = 'eight apes ate eight apples.'; echo '・検索対象の文字列: '.$text6; $search6_1 = 'es'; echo '・検索する文字列:' .$search6_1; $serachText6_1 = strrpos($text6, $search6_1); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText5_1."\n"; if($serachText6_1) { echo 'if文の条件式に使用した結果: trueです。'."\n"; } else{ echo 'if文の条件式に使用した結果: falseです。'."\n"; } $search6_2 = 'ape'; echo '・検索する文字列:' .$search6_2; $serachText6_2 = strrpos($text6, $search6_2, 8); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText6_2; if($serachText6_2) { echo 'if文の条件式に使用した結果: trueです。'; } else{ echo 'if文の条件式に使用した結果: falseです。'; } $search6_3 = 'eight'; echo '・検索する文字列:' .$search6_3; $serachText6_3 = strrpos($text6, $search6_3, -15); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText6_3; if($serachText6_3) { echo 'if文の条件式に使用した結果: trueです。'."\n"; } else{ echo 'if文の条件式に使用した結果: falseです。'."\n"; } ?> |
実行結果
stripos()で検索した文字列が見つかった場合は、trueの条理が行われています。
しかし、文字列が見つからなかった場合は、falseの処理が行われています。
また、インデックスが「0」を返す場合も、falseを通るようになります。
検索した文字列が最初に現れる位置を取得する場合
検索した文字列が最初に現れる位置を取得する場合はstrpos()を使用します。
そのため、今回紹介しているstrrpos()とは対になる関数となります。
⚫︎ index.php
1 2 3 4 5 6 7 8 9 | <?php $text7 = 'Good afternoon! Good afternoon!'; echo '・検索対象の文字列: '.$text7; $search7 = 'afternoon'; echo '・検索する文字列:' .$search7; $serachText7 = strpos($text7, $search7); echo 'strrpos()で特定の文字列を検索した結果: '. $serachText7; ?> |
実行結果
strpos()によって一つ目の「afternoon」のインデックスである「5」が表示されています。
もし、strpos()についてもっと詳しく知りたい場合は下記の記事をご参考ください。
PHPで文字列を検索する他の関数
PHPで文字列を検索する関数はstrrpos()以外にも存在します。
例えば、先ほどご紹介したstrpos()関数もあれば、検索文字列が最後に現れる位置を文字列として返す、strrchr()関数などがあります。
ここではご紹介しませんが、もし他の関数について詳しく知りたい場合は下記の記事をご参考ください。
まとめ
⚫︎ strrpos()とは検索したい文字列を対象の文字列の中から最後に現れる場所を探す関数である
⚫︎ strrpos()のパラメータは2つ必須だが、最大3つまで指定できる
・ 検索対象の文字列(必須)
・ 検索する文字列(必須)
・ 検索開始位置(任意)
⚫︎ 検索した文字列が見つかった場合は、見つかった位置をインデックス(0がスタート)で返す
⚫︎ 検索した文字列が見つからなかった場合は、値としては何も返されない
⚫︎ 検索する文字列を大文字や小文字にした場合は、値としては何も返されない
(大文字と小文字は区別される)
⚫︎ 検索開始位置に正の整数を指定して文字列を検索した場合、文字列の頭から数えた位置をスタート地点として文字列を検索する
⚫︎ 検索開始位置に負の整数を指定して文字列を検索した場合、文頭をスタート地点とし、文末のから数えた位置までの文字列を検索する
⚫︎ strrpos()をif文の条件式として使用した場合、文字列が見つかるとtrueの条理が行われ、見つからないとfalseの処理が行われる
(インデックスが「0」の場合はfalseを通る)
⚫︎ 検索した文字列が最初に現れる位置を取得する場合はstrpos()を使用する