简单的PHP。试着摆脱嵌套的if

时间:2012-10-20 20:12:17

标签: php

  

可能重复:
  Compare multiple values in PHP

请有人帮助我找到更好的写作方式。我觉得好像必须有比嵌套ifs更好的东西。我试过搜索,但我不知道我在找什么。

代码表示如果会话变量“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")
}

但这种方式与所有嵌套ifs没有太大区别。如果我只是试图修复一些没有破坏的东西,请告诉我。先感谢您。我正在寻找相关主题(最好是PHP手册)的链接,而不是解决方案。

4 个答案:

答案 0 :(得分: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

最好选择第一个选项,以防万一您可能希望将其与更多值进行比较。

答案 1 :(得分:2)

您可以保留一组值以进行检查:

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

答案 2 :(得分:1)

您可以使用in_array轻松检查$_SESSION['auth']是否等于您要查找的其中一个值。

if (in_array ($_SESSION['auth'], array (0,1,2,3)) == false)
  header ("Location: ...");

答案 3 :(得分:0)

你自己的解决方案很好:

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

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

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

不再担心分数。