array_searchで0(ゼロ)が返ってくるとif文は?

私はプログラマというわけではないのですが、よく大学や高校の後輩からPHPという言語について尋ねられます。
最近、たまたま、それぞれ異なる後輩から同じ質問をされたのでちょっと紹介しておきたいと思いまして。
実は私も以前、はまったことが・・・

PHPには、配列の要素に特定の文字列が含まれているか検索するために、array_searchという関数が用意されています。
比較的よく使うのですが、int型の0(ゼロ)が返ってくる場合を考慮しないと失敗します。

例えば、$test_array = (“岡山”, “倉敷”, “津山”); の場合、
array_search(“倉敷”, $test_array); の結果は1 ですが、
array_search(“岡山”, $test_array); の結果は0 となります。

この0(ゼロ)が曲者でして、仮に配列に岡山が含まれているかどうか調べたいときに

if (array_search(“岡山”, $test_array)) echo “含まれています”;
else echo “含まれていません”;

なんて書いちゃうと「含まれていません」と表示されるのです・・・。
if文にとっては、int型の0も、boolean型のFALSEも、同じFALSEなのです。

というわけで、下記のように修正すると期待通りの結果を得られます。

if (array_search(“岡山”, $test_array) !== FALSE) echo “含まれています”;
else echo “含まれていません”;

=== は値が等しく、同じ型という比較演算子で、
!== は値が等しくないか、同じ型ではないという比較演算子です。

これならint型の0が返ってきたとしても、FALSEではないこと(「岡山」が含まれること)が判別可能です。

本当にちょっとしたことなのですが、頭の片隅に置いておくときっと助かる場面に遭遇します。
精進、精進。

タグ:

トラックバック(0)

このブログ記事に対するトラックバックURL: http://www.netcreates.jp/blog/2008/09/array-search0if.html/trackback

コメント(2)

  1. array_search()はキーを返す関数だけど、in_array() は、配列の中に指定した値の有無のチェック。なので、中に入っているかどうかのチェックだけでよければ、array_search() よりも in_array() を使った方が混乱が少ないかも、です。

    shiten | 2008年9月24日 19:09
  2. あ、確かにin_array()なら確実にTRUEが返ってくるから0(ゼロ)を考慮しなくてもいいのか・・・。
    array_search()を使うことばかり考えていました(笑)
    サンクス!

    shinsuke | 2008年9月24日 20:52

コメントする

※入力必須ですが、公開はされません。