私はin_array
関数に問題があります。針が0の場合、in_arrayはtrueを返します
in_array(0, array('card', 'cash'))
が、私はそれをどのようにどのように防ぐことができ、それは不可能です:戻りtrue
以下のテスト?
しかし
in_array(null, array('card', 'cash'))
戻りfalse
。
私はin_array
関数に問題があります。針が0の場合、in_arrayはtrueを返します
in_array(0, array('card', 'cash'))
が、私はそれをどのようにどのように防ぐことができ、それは不可能です:戻りtrue
以下のテスト?
しかし
in_array(null, array('card', 'cash'))
戻りfalse
。
答えはそう、文字列に0
をキャストすることができます。
in_array((string) 0, array('card', 'cash'))
は0
は、いくつかの変数を指定でき、そのキャストが役に立つことができることを覚えておいてください。
あなたはin_array
で比較するとき、互換性のないデータ型に を比較しながら 文字列をintに変換され、それがcash
またはcard
を意味は0
に変換され、これはあなたが2つのオプションを持っているので、型キャスト
のすべてです
1。
in_array(0, array('card', 'cash'), true) === false;
参照データ型と一致しますtrue
に型キャストin_array上
in_array(string(0), array('card', 'cash'))) === false;
2 .USE third parameter
documentation
少し遅れてそれに答える.. – alwaysLearn
あなたは '厳格な' パラメータ使って、それを防ぐことができます。
をvar_export(in_array(0, array('card', 'cash'), true));
var_export(in_array(null, array('card', 'cash'), true));
はどちらの場合もfalseを返します。 the docs to in_array()
If the third parameter strict is set to TRUE then the in_array()
function will also check the types of the needle in the haystack.
(INT)0中(int型) 'カード' から
? –
LOOSE TYPING ...数値を文字列と比較するので、文字列は数値に変換され、この場合は0が与えられ、0 == 0となります。STRICT引数を使用してください。 –
ありがとうございます@ MarkBaker – hsz