PHPの文字列一致でstrpos()を使うときに注意すべきこと
タイトルの通り、
PHPの文字列一致でstrpos()を使った
んですが、罠にはまったのでメモがてら共有。
この記事
PHPまとめ - 文字列操作
でPHP最速の文字列検索はstrpos()だ、というのを見て文字列一致には毎回strpos()を使っていました。しかし、
$text = 'abc'; if (strpos($text, 'a')) { echo '文字列一致!'; } else { echo '文字列不一致orz'; }
このコードに期待する答えは 「文字列一致!」ですが、実際に返ってくるのは「文字列不一致orz」です。
なぜかというと、strpos()は第二引数の文字列が見つかった位置(0番目から)を返すからです。
今回の場合、$textの先頭のaと一致ということになるので、返ってくる値は0(false)なのでifには入らず、elseの処理に入ってしまいます。
よって、strpos()による文字列一致をifの分岐で使う場合、上のコードは
$text = 'abc'; if (strpos($text, 'a') !== false) { echo '文字列一致!'; } else { echo '文字列不一致orz'; }
というように、falseか否かに注目して書く必要があります。
適当にやってはダメですね笑( ´_ゝ`)