PHPのin_arrayでtrueとfalseが正しく判定されない

PHPのin_arrayでtrue,falseが正しく判定されないことがありました。
結論から言うと暗黙の型変換がかかっているためです。
in_array(“hoge”, [0,1,2], true)
のように第三引数にtrueを渡せば解決できます。

たとえば下記はすべて1(=true)となります。

[0,1,2]に”hoge”なんて含まれてませんけどね。

PHPエンジニアであれば下記がtrueになることは意識してるかと思います。

型変換せずに比較したい場合は===, !==を使用しますね。

しかし、↓もtrueになってしまいます。
数値と比較するために”hoge”を数値に変換したときにnullになってしまうからでしょうか。

というわけでいつも通り===を使用すればOKです。

つまり、in_arrayでも===, !==になれば正しく有無を判定できるわけで
in_arrayの第三引数にtrueを渡せばOKです。

ただし、これを使うと当然のことに以下はfalseになります。

というわけでこのような混乱を避けるために
PHPではfalseや空白と同じ値として0を使うのはアリだとしても
コード値などに0を使うのはできるだけ避けて
1,2,3…のように1から始めるようにしましょう。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする