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