【PHP】strposの使い方を見当違いしていました。

【PHP】strposの使い方を見当違いしていました。



PHPで特定の文字列が対象文章中に存在するかしないかの確認はstrposが一番早くて良いよ、という記事をQiitaで見ていましたので、てっきりstrposというのは、文字列検索の有無確認の為だけに使うものだと思っていました。

if ( false === strpos( $str, $keyword ) ) {
   // $str中に$keywordは含まれない.
};
【PHP】特定の文字列を含むかのチェック - Qiita
参考
【PHP】特定の文字列を含むかのチェック - Qiita

#正規表現を使わない場合 strpos,strstr,preg_matchでは**strposが最も早いのでstrposを使う。** PHPマニュアルにもそのように書いてある。 > strstr もし特定の haystack...

【PHP】特定の文字列を含むかのチェック - Qiita Qiita

しかし、コードサンプルを見ていると、

if ( 0 === strpos( $str, $keyword ) ) {
   ...
};

というのがありました。

これまでの考えから、

0 = false

となり、このコードではif構文内のファンクションは実行されない、と考えていました。

しかし、実際は実行されてしまう。

何故か?

改めてstrposのマニュアルを確認すると、

strpos — 文字列内の部分文字列が最初に現れる場所を見つける。
文字列の開始位置は 0

とありました。

つまり、

if ( 0 === strpos( $str, $keyword ) ) {
   // $str中に$keywordが先頭に含まれる.
};

という仕様になります。

strposは検索の有無を確認するのではなく、何文字目に現れるのかを確認するための関数で、

false === strpos( $str, $keyword )

は特定の文字列が含まれない場合にFALSEを返す、という仕様を利用しているということでした。

納得。

今日はここまで

関連する記事



こちらはいかが?


多次元連想配列で、値の無い配列を除外
多次元連想配列で、値の無い配列を除外

JSONファイルを作成するために、多次元連想配列を使用しているのですが、これが非常に数が多いので、一つ一つifで検証しつつ入れていくより、取り敢えず値があろうが無かろうが放り込んでおいて、最終的に値の無い箇所を除外してい…

コメントを残す