0

可能重复:
比较 PHP 中的多个值

有人能帮我找到一个更好的方法来写这个吗,拜托。我觉得好像必须有比嵌套 if 更好的东西。我已经尝试搜索,但我不知道我在寻找什么。

代码表明,如果会话变量“auth”不完全等于 0、1、2 或 3,则重定向到登录页面。

if($_SESSION['auth']!=0){
   if($_SESSION['auth']!=1){
      if($_SESSION['auth']!=2){
         if($_SESSION['auth']!=3){
            header("location:login.php");
         }
      }
   }
}

我最初的想法是做这样的事情。

if($_SESSION['auth']<=0 || $_SESSION['auth']>=3){
   header("location:login.php");
}

但这并没有考虑整数值的分数。我只想允许整数值。我的下一个想法是这个。

if($_SESSION['auth']!=0 && $_SESSION['auth']!=1 && $_SESSION['auth']!=2 && $_SESSION['auth']!=3){
   header("location:login.php")
}

但是这种方式与所有嵌套的 if 没有太大区别。让我知道我是否只是在尝试修复未损坏的东西。先感谢您。我正在寻找相关主题的链接(最好是 PHP 手册),而不是解决方案。

4

4 回答 4

3

是的,你是。更简单的方法可能是inarray()

$values = array('0','1','2','3');
if(!in_array($_SESSION['auth'], $values, true)
//do something

甚至更短

if(!in_array($_SESSION['auth'], array('0','1','2','3'), true)
//do something

最好使用第一个选项,以防您将来可能想将其与更多值进行比较。

于 2012-10-20T20:15:52.460 回答
2

您可以保留一组值来检查:

$auth_array = array('0', '1', '2', '3');
if(!in_array($_SESSION['auth'], $auth_array)){
    header("location:login.php");
}
于 2012-10-20T20:17:02.227 回答
1

您可以使用in_array它轻松检查是否$_SESSION['auth']等于您正在寻找的值之一。

if (in_array ($_SESSION['auth'], array (0,1,2,3)) == false)
  header ("Location: ...");
于 2012-10-20T20:16:17.560 回答
0

您自己的解决方案很好:

if($_SESSION['auth']<=0 || $_SESSION['auth']>=3){
   header("location:login.php");
}

如果您担心十进制值,请不要担心——如果您的代码只将其设置为整数,那么这就是全部。但是,如果您担心这一点,只需通过类型转换将值强制为整数:

$_SESSION['auth'] = (int)$_SESSION['auth'];

不再担心分数。

于 2012-10-20T20:20:09.767 回答