长逻辑运算符比较

时间:2013-03-30 05:38:02

标签: php if-statement logical-operators comparison-operators

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

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

2 个答案:

答案 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
    }
}
?>