PHP in_array()/array_search()奇数行为

PHP in_array()/array_search()奇数行为,php,arrays,boolean,Php,Arrays,Boolean,当我在_array()中使用PHP函数时,我发现了一些奇怪的行为。我有这样一个数组: $arr = [TRUE, "some string", "something else"]; 现在,如果我想检查“test”是否在数组中,它显然不在数组中,但是in_array()仍然返回TRUE,这是为什么 $result = in_array("test", $arr); var_dump($result); //Output: bool(true) 我认为数组中的值TRUE可能会自动导致函数在不检

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

$arr = [TRUE, "some string", "something else"];
现在,如果我想检查
“test”
是否在数组中,它显然不在数组中,但是
in_array()
仍然返回TRUE,这是为什么

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

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

函数的这种行为并不是一个bug,而是一种记录良好的行为

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

bool in_数组(混合$needle,数组$haystack[,bool$strict=FALSE])

混合数组搜索(混合$pinder,数组$haystack[,bool$strict=false])

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

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


请将此作为参考:

您是对的,布尔值确实会导致这种情况。在函数中设置
strict
标志,这样还可以检查元素的类型(基本上与使用
=
相同):


你能提供一个更完整的代码示例吗?你发布的代码不是很有用。您可能只是犯了一个赋值错误或其他什么……在运行检查之前,results变量被赋值到该行。然后我在那一行之后添加了
die(var_dump($results))
,以查看它返回的是什么数组。我的in_数组几乎接受任何使用python脚本发布到php脚本中的变量。非常不寻常,但这解决了它。
$result = array_search("test", $arr);
var_dump($result);  //Output: int(0)
if (in_array("username", $results, true)) // do something
if (in_array("password", $results, true)) // do something
if (in_array("birthday", $results, true)) // do something