Php“”和0返回相同的值

时间:2013-09-30 10:43:14

标签: php

$page_now=array_search($id, $user_id);

if($page_now==""){return TURE;}
else{return FALSE}//include [0]index

我有array_search,如果找不到匹配,则会返回""

但我在[0]索引

上遇到问题

如果搜索索引返回0,这是数组中的第一个。

if statement $page_now==""& $page_now==0两者都返回TURE

试试这个

$var=0;

if($var!=""){echo "have value in var";}else{echo "no value in var";}

我希望它返回有价值,即使它是0

3 个答案:

答案 0 :(得分:2)

这是记录在案的行为:

http://php.net/array_search

http://php.net/manual/en/types.comparisons.php

http://www.php.net/manual/en/language.types.type-juggling.php

  

警告

     

此函数可能返回布尔值FALSE,但也可能返回a   非布尔值,其值为FALSE。请阅读有关的部分   布尔值获取更多信息。使用===运算符进行测试   返回此函数的值。

还要确保您了解这一点:

  

严格

     

如果第三个参数strict设置为TRUE则为   array_search()函数将搜索相同的元素   草垛。这意味着它还将检查针的类型   haystack和对象必须是同一个实例。

如果你不想陷入PHP弱类型比较的深渊,你应该使用严格的比较运算符===

php > var_dump(0 == "0afca13435"); // oops, password's hash check went wrong :)
bool(true)

php > var_dump(0 == false);
bool(true)

BUT:
php > var_dump(false == "0afca13435");
bool(false)
// Uh, oh :) that's because int and string comparison will cast string to int,
// and in php string->int cast will return either 0 or any numeric prefix the
// string contain; bool and string comparison will cast string to bool, and 
// numeric prefix is no longer an issue
----------

php > var_dump(false == "");
bool(true)

php > var_dump(0 == "");
bool(true)
// WTF! :)

严格:

php > var_dump(0 === "0afca13435");
bool(false)
// ahh, much better

答案 1 :(得分:2)

如果函数array_search()找不到匹配项,则返回false。因此,您应该使用严格比较运算符===并将其与false进行比较:

if($page_now===false) {
    return true;
}
else {
    return false;
}

答案 2 :(得分:0)

尝试这个(空检查变量是否为空(“”(空字符串),0,false,null等)被计为空(并将触发此操作) 你的代码现在没有检查某些东西是否为空,你只检查它是否为“”,而null等将被触发为非空。

if(empty($page_now)){
    return true;
}else{
    return false;
}

如果允许为0,则可以使用此

if(empty($page_now) && $page_now != 0){
      return true;
}else{
    return false;
}