PHP 的 in_array() 和 array_search() 函数:解决奇怪的行为
PHP 函数 in_array() 和 array_search() 表现出奇怪的行为当用于检查数组中的值时。当数组包含不同类型的元素时,就会出现这个令人费解的问题。
示例:
$arr = [TRUE, "some string", "something else"]; $result = in_array("test", $arr); var_dump($result); // Output: bool(true) $result = array_search("test", $arr); var_dump($result); // Output: int(0)
令人惊讶,不是吗?两个函数都返回 true,表明“test”在数组中,尽管它显然不在数组中。此行为源于这些函数使用的默认比较机制。
严格与松散比较:
默认情况下,in_array() 和 array_search() 使用松散比较(==),即使所比较的值的类型不同,它也会评估 true。在我们的示例中,数组中的 TRUE 元素自动转换为字符串,导致 TRUE == "test" 计算结果为 true。
解决方案:强制严格比较
为了防止这种意外行为,需要通过将这些函数的可选第三个参数设置为 true 来指定严格比较(===)。这迫使函数在比较时检查元素的值和类型,以确保更准确的结果。
$result = in_array("test", $arr, true); var_dump($result); // Output: bool(false) $result = array_search("test", $arr, true); var_dump($result); // Output: int(-1)
在这个修改后的示例中,获得了正确的结果,因为函数被指示使用严格比较。在数组中找不到“test”,返回值反映了这一点。
以上是为什么 PHP 的 `in_array()` 和 `array_search()` 有时会返回意外结果?的详细内容。更多信息请关注PHP中文网其他相关文章!