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

ReratedPosts

PHPで配列や連想配列の要素をそれぞれ変数に直す方法
PHPのissetとis_null、emptyの違いや関係を調べてみる
phpで自作strlen関数を作ってみた
CentOS7にphpbrewとphpを入れてPHPの開発環境を構築する方法
phpのextract関数の使い方とか逆のことをするcompact関数とかの解説
phpの__autoload関数とかspl_autoload_registerについて理解したのでまとめておく