くわこのpermission denied.

WEBエンジニアの僕がぶつかった技術的な問題や発見

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か否かに注目して書く必要があります。

適当にやってはダメですね笑( ´_ゝ`)