2017-02-28

tobijibu

phpのin_arrayに困惑する

現場でphpで古いシステムの改修をしていて、どうも思ったとおりの結果が出てこず、非常に焦りましたのでメモを残しておきます。

in_arrayを利用して判定している箇所があるのですが、 要素にnullが入ってしまうパターンがあり、in_arrayの判定で、想定していない結果が返ってきていました。

in_arrayでの値の判定は、通常の場合==と同様の処理になります。つまり、0nullは同等になります。

ですので、配列にnullfalseを検索値として指定する場合は、in_arrayの第3引数に$strict = trueを指定して、型も確認する必要があります。

$arr = array(null, 1, 2);
var_dump(in_array(0, $arr));        // --> bool(true)
var_dump(in_array(0, $arr, true));  // --> bool(false)

気づいてしまえばなんてこと無いのですが、原因の特定にかなりの時間を掛けてしまいました。反省です。

こんなことにならないようにin_arrayには常に第3引数を指定しましょう。

array_searcharray_keys$strict = trueが指定可能です。