为什么'bob@example.com'在数组(0,1,2,3,4)中?

时间:2013-04-30 17:01:18

标签: php comparison

为什么'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)

那么这里发生了什么?

3 个答案:

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