0

結果を決定する 3 つの変数があります。結果は 2 つしかありませんが、結果は変数に基づいています。私はいくつかの長い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)

最後の 2 つの変数のさまざまな組み合わせは、さまざまな結果をもたらしますが、一部の組み合わせは行き止まりであり、無関係です。

if ($loggedin == 1 && ($status == 1 || $status == 2 ) &&  'whattodohere' ):

すべての組み合わせを手動で入力することもできますが($access == 0 && ($var == 2 || $var = 6))、私が知らないより良い方法があるかどうか疑問に思っています。

4

2 に答える 2

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 に答える
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 に答える