我的in_array
功能存在问题。以下测试返回true
:
in_array(0, array('card', 'cash'))
怎么可能无法阻止呢?
然而
in_array(null, array('card', 'cash'))
返回false
。
答案 0 :(得分:24)
将任何不以数字开头的字符串转换为数字会导致PHP中出现0
。这正是将0
与某些字符串进行比较时会发生的情况。有关如何完成各种类型之间比较的详细信息,请参阅PHP docs。
使用in_array
的第三个参数(设置为true
)以避免类型松散。
in_array(0, array('card', 'cash'), true) === false
答案 1 :(得分:7)
在in_array
进行比较时
在比较不兼容的数据类型时,string被转换为int
这意味着cash
或card
转换为0
这都是因为类型转换
您有2个选项
1。输入
in_array(string(0), array('card', 'cash'))) === false;
2.在on_array上使用third parameter
到true
,它将匹配数据类型
in_array(0, array('card', 'cash'), true) === false;
答案 2 :(得分:2)
您可以使用'strict'参数来阻止它:
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.
答案 3 :(得分:0)
答案可以是将0
转换为字符串,所以:
in_array((string) 0, array('card', 'cash'))
请记住,0
可以是某个变量,因此强制转换可能会有所帮助。