gpt4 book ai didi

PHP in_array()/array_search() 奇怪的行为

转载 作者:可可西里 更新时间:2023-11-01 13:44:15 26 4
gpt4 key购买 nike

我在使用 PHP 函数 in_array() 时发现了一些奇怪的行为。我有一个这样的数组:

$arr = [TRUE, "some string", "something else"];

现在如果我想检查 "test" 是否在数组中,显然不在,但 in_array() 仍然返回 TRUE,这是为什么呢?

$result = in_array("test", $arr);
var_dump($result); //<b>Output: bool(true)</b>

同样的事情发生在使用 array_search() 时:

$result = array_search("test", $arr);
var_dump($result); //<b>Output: int(0)</b>

我想也许数组中的值 TRUE 会自动导致函数在不检查数组的其余部分的情况下为每个结果返回 TRUE,但我找不到任何文档表明这个非常奇怪的功能。

最佳答案

函数的这种行为 in_array()array_search()不是错误,而是有据可查的行为。

这两个函数都有一个名为 $strict 的第三个可选参数,默认情况下为 FALSE:

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] )

现在这意味着默认情况下两个函数都使用松散的 (==) 比较来比较值。所以他们只检查值是否相同之后 PHP 类型杂耍而不检查类型。因此,在您的示例中,TRUE == "any none emtpy string" 的计算结果为 TRUE。

因此,通过在调用函数时将第 3 个参数设置为 TRUE,您表示 PHP 应该使用严格(===)比较,并且它应该在比较时检查值和值的类型。

引用:How do the PHP equality (== double equals) and identity (=== triple equals) comparison operators differ?

关于PHP in_array()/array_search() 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2739441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com