0

我有三个决定结果的变量。只有两个结果,但结果是基于变量的。我想出了一些长长的 if 语句,但我想知道是否有更清洁的方法来做到这一点。

$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))但我想知道是否有更好的方法来做到这一点,但我不知道。

4

2 回答 2

1

看看 bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )- http://php.net/manual/en/function.in-array.php

还要看看 range(...) - http://php.net/manual/en/function.range.php

$状态 == 1 || $status == 2 [... $status == n] 可以简化为 in_array( $status, range(0, $n) )

使用 in_array & range 在性能方面成本更高,因此,如果您确定只需要尝试 2 个不同的值,请改用 == 运算符。

于 2013-03-30T06:04:37.027 回答
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
    }
}
?>
于 2013-03-30T06:31:06.883 回答