为什么'bob@example.com'被认为是in_array数组(0,1,2,3,4)?
$email = 'bob@example.com';
$validValues = array(0,1,2,4);
var_dump(in_array($email, $validValues)); // bool(true)
var_dump(in_array($email, $validValues, true)); // bool(false)
那么这里发生了什么?
答案 0 :(得分:4)
因为0 == 'bob@example.com'
(字符串转换为数字),但是0 !== 'bob@example.com'
。
==
和!=
运算符执行类型强制,并将转换一个操作数以匹配另一个操作数的类型。如果操作数的类型不完全相同,则===
和!==
运算符将返回false 和操作数的值相等。
in_array()
的第三个参数决定使用哪种类型的相等性测试。
答案 1 :(得分:0)
in_array
的第三个属性决定测试是否应该严格(===
)。在所有其他情况下,PHP的类型转换的固有怪癖开始......
答案 2 :(得分:0)
in_array($value, $array, $strict);
是in_array
函数的签名。 $strict
,如果为真,则检查===
,如果仅==
为假,则会检查。
当你执行'bob@example.com' == 0
时,你会得到真实的结果。
因此,当您执行第一次检查时,它会认为$email == 0
并返回true。