現場でphpで古いシステムの改修をしていて、どうも思ったとおりの結果が出てこず、非常に焦りましたのでメモを残しておきます。
in_array
を利用して判定している箇所があるのですが、
要素にnull
が入ってしまうパターンがあり、in_array
の判定で、想定していない結果が返ってきていました。
in_array
での値の判定は、通常の場合==
と同様の処理になります。つまり、0
とnull
は同等になります。
ですので、配列にnull
やfalse
を検索値として指定する場合は、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_search
、array_keys
も$strict = true
が指定可能です。