PHP in_array 函数给出烦人的结果

PHP in_array function give annoying result

PHP 7

in_array('one', [0 => 0]) //true
in_array('one', [0]) //true
in_array('one', array_keys([0 => 0])); //true

预期结果为 FALSE,因为显然给定数组中没有字符串值,也没有 'true' 值(字符串可以被评估为 true 并匹配)

如果我们假设任何类型比较 0 整数在 PHP 中总是与 false 进行比较,而 String 与 true 进行比较,那么为什么这仍然有效?

我知道,严格模式存在并且工作正常,但无论如何绝对烦人为什么会发生这种情况。有什么解释吗?

in_array works when u use it like this

in_array('one', [0,1])

in_array 函数期望数组作为索引数组,即 [0,1,"two"] 而不是 关联数组 (键值对)。 您可以使用 array_values 忽略特定的键,它 returns 只有值。

in_array('one', array_values([0 => 0])) // true //tested

你的问题的答案在这里:

Comparing String to Integer gives strange results

"one" == 0 时的情况与您的示例相同。

TL:DR - 在 string-to-integer 比较中,字符串将被转换为整数,而不是整数到字符串,因此“一”将被转换为 0