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