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