[PHP] strpos関数を使う際には比較演算子に注意する

このエントリーをはてなブックマークに追加

こんにちは、fujinyoです。
ある文字列の中に特定の文字列があるかどうかを検索したい事はよくあります。

そこで、PHPであればstrpos関数を使うのですが、strpos関数を使う際に注意すべき事があります。
まずはマニュアルを読んで行きましょう。

“0”も返すし、FALSEも返す
Tokyo Skytree and EitaibashiTokyo Skytree and Eitaibashi / Manish Prabhune(マニッシュ)

strpos関数
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
文字列 haystack の中で、 needle が最初に現れる位置を探します。
返り値
needle が見つかった位置を、 haystack 文字列の先頭 (offset の値とは無関係) からの相対位置で返します。 文字列の開始位置は 0 であり、1 ではないことに注意しましょう。
needle が見つからない場合は FALSE を返します。

ちょっとサンプルコードを作ってみました。

$haystack = "今日、スカイツリーに行きました";
$needle = "スカイツリー";

echo strpos($haystack, $needle);

これは、9という結果が返ってきます。

では、次です。

$haystack = "スカイツリーに行きたいです。";
$needle = "スカイツリー";

echo strpos($haystack, $needle);

$needle = "東京タワー";
echo strpos($haystack, $needle);

2パターンあります。
1つ目(スカイツリー)の場合は、0が返ってきます。
そして、2つ目(東京タワー)の場合は、FALSEが返ってきます。

で、ここが注意点なのですが、PHPでは0も ==演算子 ではFALSEと判定されてしまいますので
戻り値を判定して処理を行う場合は、 ===演算子 を用いて比較する必要があります。

==演算子を使っても、もちろん構文エラーにはならないので注意が必要です。
しっかりマニュアルを読んで、どういう場合にどういう戻り値が返ってくるのか注意する必要がありますね。

では、また。

参考 : PHP:strpos関数に見る結果判定の注意点:===演算子

[PR] 「結さん」があなたに代わって開発案件の依頼主を探します

  • 「既存のクライアントにギャラアップは言いにくい」
  • 「営業活動する時間がないし、苦手」
  • 「仕事が途切れたらどうしよう」

ITエンジニアのこんな悩みを「結さん」が解決してくれます
結さんへの無料会員登録後は提案メールを待つだけです!

関連記事

このエントリーをはてなブックマークに追加