今回ご紹介するのは
PHPで特定の文字列が含まれているかを簡単に判定する方法
です。
【ソースコード】特定の文字列が含まれているか判定する
以下のソースコードで「対象の文字列」に「キーワード」が含まれているかどうかを判定することが可能です。
if( strpos('対象の文字列',(string)'キーワード' ) !== false ){
// 文字列が含まれていた場合の処理
}
strpos()は「対象の文字列」内に「キーワード」が何番目にあるかを調べる関数です。
※正確には「何バイト目」にあるかを調べてくれます。
- 「キーワード」が見つかった場合……見つかった位置番号を返す
- 「キーワード」が見つからなかった場合……falseを返す
注意点①
strpos()の返り値を判定する場合は、必ず「===」もしくは「!==」演算子を使用してください。
(※「==」や「!=」ではダメということ)
strpos()はfalseまたは数値を返す関数ですが、数値の中には「0」が含まれる場合があります。
「0」はfalseの意味も持つため、if文で評価するときは型まで確認しないと正しく判定できない可能性があります。
注意点②
「キーワード」は明示的に(string)’キーワード’のように文字列型にキャストしましょう。
※PHP公式ドキュメントで推奨されているため(詳しくは【パラメータ】→【needle】の項目をご覧ください。)
使用例
「キーワード」が含まれている場合
$val = 'abcdefg';
$keyword = 'bc';
if( strpos( $val, (string) $keyword ) !== false ){
// $keywordが含まれている場合の処理
}
キーワードが含まれていない場合
$val = 'abcdefg';
$keyword = 'bc';
if( strpos( $val, (string) $keyword ) === false ){
// $keywordが含まれていない場合の処理
}
【補足】マルチバイト文字列でキーワードを検索する場合
前章でご紹介したstrpos関数は、あくまでもその文字列内でキーワードが「何文字目か」ではなく、「何バイト目」に出現するかを調べてくれる関数です。
以下の例をご覧ください。
具体例
$val = '今日の朝食はパンだった';
$keyword = 'パン';
echo strpos( $val, $keyword ); // 出力結果:16
echo mb_strpos( $val, $keyword ); // 出力結果:6
このように、マルチバイト文字列を対象として検索した場合、mb_strpos()では正しい位置を返してくれるのに対し、
strpos()は欲しい検索位置を返してくれません。
(繰り返しになりますが、strpos()はあくまで「何バイト目に出現するか」を調べてくれる関数であるためです)
検索対象の文字列で扱っているのがマルチバイトなのかどうかによって、適切な方を使用するようにしましょう!
まとめ
以上がPHPで特定の文字列が含まれているかどうかを判定する方法でした!
strpos()関数を使用すれば簡単に文字列が含まれているかどうかを判定することが可能です。
注意点が2つあるため、実際にお使いいただく際はその点にお気を付けください。
- strpos()の返り値を判定する場合は、必ず「===」もしくは「!==」演算子を使用する
- 「キーワード」は明示的に(string)’キーワード’のように文字列型にキャストする
また、マルチバイト文字列を対象にキーワード検索する場合は、mb_strpos()を使用するようにしましょう。
それでは最後までご覧いただきありがとうございました!
無料でPHPが学べるプログミングスクール
コメント