PHP 7
in_array('one', [0 => 0]) //true
in_array('one', [0]) //true
in_array('one', array_keys([0 => 0])); //true
预期结果为FALSE,因为显然在给定数组中没有字符串值,也没有“真”值(可以将字符串评估为真并匹配)
如果我们假设在PHP中总是将类型比较0整数与false进行比较,而将String与true进行比较,那么为什么这仍然可行?
我知道,严格模式存在并且可以正常工作,但是无论如何绝对令人讨厌。有什么解释吗?
答案 0 :(得分:1)
您的问题的答案在这里:
Comparing String to Integer gives strange results
与您的示例中的"one" == 0
情况相同。
TL:DR-在字符串到整数的比较中,字符串将被转换为整数,而不是整数至字符串,因此“一个”将被转换为0
答案 1 :(得分:0)
当您像这样使用它时,in_array可以工作
in_array('one', [0,1])
答案 2 :(得分:0)
in_array
函数期望数组作为索引数组,即[0,1,"two"]
不是关联数组(键值对)。
您可以使用array_values
忽略特定的键,它仅返回值。
in_array('one', array_values([0 => 0])) // true //tested