数组内的 TRUTH 特殊行为
PHP 的 in_array() 函数在处理包含布尔值 TRUE 的数组时表现出意外的行为。
让我们考虑以下内容array:
$arr = [TRUE, "some string", "something else"];
令人惊讶的是,尽管“test”不在数组中,但 in_array("test", $arr) 返回 true。 array_search("test", $arr) 也会出现同样的异常结果,它返回 0。
此行为不是错误,而是一个有据可查的功能。
严格来说说:理解第三个参数
in_array() 和 array_search() 都拥有可选的第三个参数参数 $strict,默认为 FALSE。
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ])
这意味着,默认情况下,两个函数都采用松散比较 (==)。他们仅根据平等来评估价值观,而忽略其类型。因此,在给定的示例中,由于类型杂乱, TRUE == "any non-empty string" 返回 true。
强制严格:将 $strict 设置为 TRUE
为了确保比较准确,您可以将 $strict 设置为 TRUE。这样做会强制 PHP 使用严格比较 (===),同时检查所比较值的值和类型。
$result = in_array("test", $arr, TRUE); var_dump($result); // Output: bool(false)
在这种情况下,in_array() 正如预期的那样正确返回 false。
请记住,在使用 in_array() 和 array_search() 时,理解类型杂耍的细微差别和 $strict 的作用至关重要。这些函数提供了强大的搜索功能,但如果忽略这些微妙之处,它们的行为可能是不可预测的。
以上是为什么 PHP 中的 in_array() 对于不存在的值返回 True?的详细内容。更多信息请关注PHP中文网其他相关文章!