我有三个决定结果的变量。只有两个结果,但结果是基于变量。我已经想到了一些冗长的陈述,但我想知道是否有更清洁的方法来做到这一点。
$loggedin = (0 or 1) // If it is 0 then one outcome if 1 then it falls onto the next three variables
$status = (0-5) // 4 dead ends
$access = (0-3) //
$permission = (0-9)
最后两个变量的不同组合导致不同的结果,尽管某些组合是无关紧要的,因为它们是死路一条。
if ($loggedin == 1 && ($status == 1 || $status == 2 ) && 'whattodohere' ):
我可以手动输入所有组合($access == 0 && ($var == 2 || $var = 6))
,但我想知道是否有更好的方法可以做到这一点我不知道。
答案 0 :(得分:1)
查看 bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
- http://php.net/manual/en/function.in-array.php
另请查看范围(...) - http://php.net/manual/en/function.range.php
$ status == 1 || $ status == 2 [... $ status == n]可以缩减为in_array($ status,range(0,$ n))
使用in_array&范围是性能更高的性能,所以如果你确定你只需要尝试2个不同的值,请改用==运算符。
答案 1 :(得分:1)
一种方法可以是使用switch():http://php.net/manual/en/control-structures.switch.php
示例:
<?php
/*
$loggedin = (0 or 1) // If it is 0 then one outcome if 1 then it falls onto the next three variables
$status = (0-5) // 4 dead ends
$access = (0-3) //
$permission = (0-9) */
$access = 1;
$loggedin = 1;
$status = 1;
if ($loggedin == 1) {
if ($status == 1 || $status == 2 ) {
switch($access) {
case 0:
//do some coding
break;
case 1:
echo 'ACCESSS 1';
//do some coding
break;
default:
//Do some coding here when $access is issued in the cases above
break;
}
}
}
else {
//Do coding when $loggedIn = 0
}
?>
在示例中,ACCESS 1将是输出。
也许你也可以做一些数学并比较结果(在某些情况下取决于你想要达到的目的)。例如:
<?php
$permission = 1;
$access = 2;
$result = $permission * $access;
if ($result > 0) {
switch($result) {
case 0:
//do something
break;
case 1:
//do something
break;
default:
//Do something when value of $result not issued in the cases above
}
}
?>