初めまして、Freedomingでバックエンドエンジニアをしております、川野です。私はPHPの記事を中心に書かせていただきます。
社内にはPHP初学者もおりますので、初級〜中級くらいのものを上げていこうと思っております。
今回はPHPのIn_array関数を使用するときについて記載します。
まず、in_array関数について説明すると、配列に指定した値が存在するか判定を行う際に用いる関数となります。
$nameArray = ['田中', '斎藤', '山田'];
var_dump(in_array('田中', $nameArray)); // trueを返す
var_dump(in_array('川野', $nameArray)); // falseを返す
ただ単純に値があるか判定するだけであれば、問題ありません。
しかし、例えば以下のような場合だと自分の意図した動作をしてくれないので注意です。
$numArray= [0, 1, 2, 3];
var_dump(in_array('1', $numArray)); // trueを返す
var_dump(in_array('2.0', $numArray)); // trueを返す
numArray
配列の中は整数だけですが、少数の2.0でも判定としてはtureなっています。
本来、存在しない値のためfalseですが、trueになった理由としてはin_array関数の仕様が影響しています。
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
needle で haystack を検索します。 strict が設定されていない限りは型の比較は行いません。
$numArray= [0, 1, 2, 3];
var_dump(in_array('1', $numArray, true)); // trueを返す
var_dump(in_array('2.0', $numArray, true)); // falseを返す
in_array関数は第三引数にtrueを指定しない限り、厳密な型チェックをしてくれません。
なので、整数だけの配列内に、型が違う小数の2.0が存在すると判定になりました。
PHPは型比較が甘く、深く考えなくても良いというのがメリットですが、型はプログラムでデータの流れを見るときのヒントにもなるので、型比較を厳密にしてくれるように実装しましょう。
PHPから提供されている関数には、便利な物が多数ありますが、実際に実装する際に用いるときは
マニュアルをしっかり読み、型の厳密などが行われているか確認をしましょう。
参考
PHPマニュアル