Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP数组_搜索函数不能正常使用返回值_Php - Fatal编程技术网

PHP数组_搜索函数不能正常使用返回值

PHP数组_搜索函数不能正常使用返回值,php,Php,今天,我发现phparray\u search函数有一个非常奇怪的问题。实际上,我应用了一个条件,如果索引0或大于,那么它应该通过if条件,否则不是,但它的功能不是这样的 我分析发现,如果输出是FALSE,那么(FALSE>=0)它也通过了比较值的条件,不知道为什么。有人能解释这个问题吗 这似乎不是array\u search函数问题,但我在使用该函数时遇到了这个问题 PHP手册:您需要使用==,因为它会检查值,也会检查值的类型,以便在您的情况下不会通过条件。它正在检查值,但没有检查导致问题的类

今天,我发现phparray\u search函数有一个非常奇怪的问题。实际上,我应用了一个条件,如果索引0或大于,那么它应该通过if条件,否则不是,但它的功能不是这样的

我分析发现,如果输出是FALSE,那么(FALSE>=0)它也通过了比较值的条件,不知道为什么。有人能解释这个问题吗

这似乎不是array\u search函数问题,但我在使用该函数时遇到了这个问题


PHP手册:

您需要使用
==
,因为它会检查值,也会检查值的类型,以便在您的情况下不会通过条件。它正在检查值,但没有检查导致问题的类型,因为它将
false
视为明显为真的字符串(字符串的值大于0)


我分析发现,如果输出为FALSE,那么(FALSE>=0)它也通过了条件和比较值,不知道为什么。有人能解释这个问题吗?

查看不同类型的比较表

根据此表,如果将布尔值与任何其他类型进行比较,则这两个值都将转换为布尔值,然后进行比较。在您的例子中,整数
0
被转换为
FALSE
,最终php比较
FALSE>=FALSE

由于
FALSE
大于或等于
FALSE,您的条件返回true。

它不会返回
FALSE
array\u search
返回搜索值所在的索引,如果未找到,则返回
false
。示例中的返回值为
0
<代码>0!==错误
。TL;DR-对返回值进行严格比较。
echo$output
给出了什么?如果尝试使用不存在的值,则将返回FALSE。您可以尝试使用var_dump.ok,但是当使用松散的比较检查时,
0==false->true
,而
0===false->false
。您链接的php手册页面上有一个警告框,解释了可能返回值的危险。我知道解决方案,但我想问为什么会发生这种情况?当它返回false时,您正在使用
=
进行比较,它只检查值,在您的案例中,
false
被视为一个字符串和
any string>0
始终是我没有提到的原因==到任何地方。
=
我只是指这一个,它是检查值,您可以执行var\u dump来检查数据类型。它返回的布尔值不是字符串类型的数据。它看起来是正确的,但仍然有一个问题,这是一个逻辑错误还是一个PHP错误?这是预期和记录的行为,所以肯定不是PHP错误。PHP是一种松散类型的语言,因此开发人员必须找到一种方法来比较不同的类型。这就是他们在逻辑上处理它的方式,如果你真的比较布尔和int,我会说这种行为是非常合乎逻辑的。但比较本身并没有多大意义。然而,问题是它是否符合逻辑,似乎更像是Observision basedI使用javascript对它进行了很少的研究,它的行为与布尔值(false)相同,但与字符串值的行为不同Javascript代码/var test='sdf';如果(test>=0){alert('hi');}/PHP代码*/$test='sdf';如果($test>=0){echo'=';}
$allowedJobCodesForCC   =   array(  "xyz", "abc");
/* output if value not found in array 
var_dump(array_search(strtolower(trim('xyzfd')), $allowedJobCodesForCC));
*/
$output = array_search(strtolower(trim('xyz')), $allowedJobCodesForCC); //output : false

/* array_search function treating false return value and passing it to the condition */
if($output >= 0){
    echo 'passed'; //it should not print this condition if return value is FALSE
}

/* correct fix if indexes are numeric */
if(is_numeric($output)){
    echo 'passed';
}
$allowedJobCodesForCC = array("xyz", "abc");
/* output if value not found in array 
  var_dump(array_search(strtolower(trim('xyzfd')), $allowedJobCodesForCC));
 */
$output = array_search(strtolower(trim('xyz')), $allowedJobCodesForCC); //output : false

/* array_search function treating false return value and passing it to the condition */
if ($output === False && $output !== 0) {
    echo 'not passed'; //it should not print this condition if return value is FALSE
} else {
    echo 'passed';
}