【PHP】配列の中に指定した値が存在するか確認できる関数「in_array()」

Pocket

今回は配列の中に、指定した文字列や数値が存在するか確認できる関数、in_array() の使い方をメモします。
検索対象が存在するかしないかで条件分岐を作れるので、色々な場面で活躍しそうな関数ですね。

「in_array()」 関数とは

「in_array()」 関数の書き方は以下の通りです。

第1引数には検索したい値第2引数には検索対象となる配列を記述します。この二つの設定は必須です。
第3引数は省略することができますが、諸事情により「True」を設定したほうがいいとされています。このことはあとで説明させて頂きます。

配列の中に検索した値が存在する場合、「true」を返し、なければ「false」を返すのが「in_array()」関数のお仕事です。
それでは実際に書いてみます

 

「in_array()」 関数の使い方

上記サンプルのように、配列内に値が存在すれば「true」を返し、「false」が返されます。
今回は「yellow」という文字列が配列にあるので「true」、「gold」は存在しないので「false」が返されます。
これを利用して、条件分岐を作ってみましょう。
こんな感じで条件分岐で、配列内に存在するかしないかを検査してくれるプログラムができるわけですね。

 

「in_array()」 の注意点…第3引数には必ず「true」を入れよう!

「in_array()」関数の第3引数は省略すると false がデフォルトで入ります。第3引数の意味としては、検索する値と配列の型検査をするかしないかということです。「true」で型検査を行い、「false」で行いません。第3引数を省略すると型検査を行わないということですね。
この型検査を行わないと、数値と文字列の違いでも「true」が返ってきたり、最悪の場合・・・全く違うものが「true」として返ってきてバグの原因になります。

 

サンプルコードをいてみると、第3引数に true を設定した時としない時では結果がまるで違うことが分かると思います。
この原因が先程説明した型検査の影響です。
配列内に含まれているのは数値型である2ですが、検索しているは文字列の”2″です。このように型検査をするかしないかで true と false という結果が分かれます。
まあこれなら分かりやすいのですが、”yellow”に関しては配列内に全くそんな文字列は見当たりませんが、なぜ第3引数を設定していないほうは true になっているのでしょうか?
調べてみるとPHPには、文字列と数値を比較する場合、仕様上の関係で文字列の型変換が勝手に行われて「0」という値に変わってしまうようです。
そう、「”yellow”」が勝手に「0」に変換されて、それが配列内にある0に引っかかって true が返ってきてしまったのです。
「in_array()」にはこのような落とし穴がある為、このような事態にならないよう、理由がない限り第3引数には true を入れておくことが推奨されています。

まとめ

  • in_array() を利用して、検索したい値が配列内にあるかどうか調べることができる。
  • in_array() はtrue と false で結果を返してくる。if 文を使って条件分岐が作れる。
  • in_array() の第3引数は型を調べるかどうか設定するものであり、デフォルトは false に設定されている
  • in_array() を使用する時は、第3引数に true を設定することが推奨されている

エッグ

シェアする

コメントを残す

メールアドレスが公開されることはありません。

コメントする