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

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

我有一个array_search,如果找不到匹配项,它将返回""

但是我在[0]索引上有问题

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

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

尝试这个

$var=0;

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

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

4

3 回答 3

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,但也可能返回计算结果为 FALSE 的非布尔值。请阅读有关布尔值的部分以获取更多信息。使用 === 运算符测试此函数的返回值。

还要确保您知道这一点:

严格的

如果第三个参数 strict 设置为 TRUE,则 array_search() 函数将在大海捞针中搜索相同的元素。这意味着它还将检查大海捞针的类型,并且对象必须是相同的实例。

===如果您不想陷入 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
于 2013-09-30T10:54:16.570 回答
2

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

if($page_now===false) {
    return true;
}
else {
    return false;
}
于 2013-09-30T10:55:55.477 回答
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;
}
于 2013-09-30T10:45:55.920 回答