为什么会返回true。
$needle = TRUE;
$haystack = array('that', 'this');
print in_array($needle, $haystack); // 1
编辑:我知道可以通过in_array()
严格参数来检查类型。我想知道为什么,特别是我展示的行为。
答案 0 :(得分:3)
当进行松散比较时,PHP中的任何非空字符串都等于TRUE
(即忽略类型)。您可以通过执行以下操作来测试:
var_dump('this' == TRUE);
var_dump('that' == TRUE);
但是,当进行严格的比较时(即考虑类型),结果是完全不同的:
var_dump('this' === TRUE);
var_dump('that' === TRUE);
为了在函数in_array
中强制执行严格比较,您必须将可选的第三个参数设置为TRUE
:
$needle = TRUE;
$haystack = array('that', 'this');
var_dump(in_array($needle, $haystack, TRUE));