$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
答案 0 :(得分:2)
这是记录在案的行为:
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;
}