0

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

那么这里发生了什么?

4

3 回答 3

4

因为0 == 'bob@example.com'(字符串被转换为数字),但是0 !== 'bob@example.com'.

==and!=运算符执行类型强制,并将转换一个操作数以匹配另一个操作数的类型。如果操作数的类型不完全相同===操作数的值相等,则and运算符将返回 false 。!==

第三个参数in_array()确定使用哪种类型的相等测试。

于 2013-04-30T17:02:56.290 回答
0

的第三个属性in_array决定测试是否应该是严格的(===)。在所有其他情况下,PHP 类型转换的固有怪癖开始......

于 2013-04-30T17:04:37.133 回答
0
in_array($value, $array, $strict);

in_array函数的签名。$strict, 如果为真,则检查===,如果为假,则仅检查==

当你这样做时,'bob@example.com' == 0你会得到真实的结果。

因此,当您执行第一次检查时,它会认为$email == 0并返回 true。

于 2013-04-30T17:05:07.337 回答