PHP in_array函数产生令人讨厌的结果

时间:2020-09-22 09:08:45

标签: php arrays php-7

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进行比较,那么为什么这仍然可行?

我知道,严格模式存在并且可以正常工作,但是无论如何绝对令人讨厌。有什么解释吗?

3 个答案:

答案 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