我有一个in_array
函数的问题。测试下面的回报true
:如果needle为0,in_array返回true
in_array(0, array('card', 'cash'))
这怎么可能,我怎么能阻止它?
然而
in_array(null, array('card', 'cash'))
回报false
。
我有一个in_array
函数的问题。测试下面的回报true
:如果needle为0,in_array返回true
in_array(0, array('card', 'cash'))
这怎么可能,我怎么能阻止它?
然而
in_array(null, array('card', 'cash'))
回报false
。
的回答可以是铸造0
串,这样:
in_array((string) 0, array('card', 'cash'))
记住0
可以有一些变化,所以铸造可以是有益的。
in_array
字符串比较
转换而比较不兼容的数据类型 这意味着cash
或card
转化为0
这一切都是因为类型转换成int
您有2个选项
1。类型转换上in_array
in_array(string(0), array('card', 'cash'))) === false;
2。用third parameter
到true
将匹配该数据类型
in_array(0, array('card', 'cash'), true) === false;
OOPS!有点晚回答.. – alwaysLearn
可以防止它通过使用 '严格' 参数:
var_export(in_array(0, array('card', 'cash'), true));
var_export(in_array(null, array('card', 'cash'), true));
在这两种情况下都返回false。
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