PHPのin_arrayの第3引数にはtrueを使う方が良いという話
PHPではin_array
と言う、第1引数で指定した要素が第2引数に指定した配列に含まれるかをチェックできる関数がある。
例えば、以下の様に使う事が多い。
<?php
$array = ["123", "tarou"];
$result = in_array(123, $array);
var_dump($result);
上記の例では、$array
配列にintegerの123
が含まれているかをチェックしているが、$array配列にはinteger型の123ではなく、文字列の123が含まれているので、この場合だとfalse
を返すことを期待する。
しかし、実際の結果ではtrue
と返ってくる!
これは、PHPの内部で123の型変換が行われるためである。
第3引数にtrueを渡して、型変換を禁止する
上記の問題の解決策は簡単で、第3引数にtrue
を渡してやるとよい。
<?php
$array = ["123", "tarou"];
$result = in_array(123, $array, true); // trueを入れる
var_dump($result);
これで期待通りの動きをしてくれる。また、公式リファレンスにも以下の様な記述がある。
三番目のパラメータ strict が TRUE に設定された場合、 in_array() は、haystack の中の needle の 型も確認します。 PHP: in_array - Manual