请有人帮助我找到更好的写作方式。我觉得好像必须有比嵌套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手册)的链接,而不是解决方案。
答案 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'];
不再担心分数。