2013-03-30 116 views
0

我有三個變量來確定結果。只有兩個結果,但結果是基於變量。我已經想了很長時間,但我想知道是否有更乾淨的方法來做到這一點。長邏輯運算符比較

$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))但我不知道是否有這樣做的,我不知道一個更好的方式。

回答

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

$狀態== 1 || $ status == 2 [... $ status == n]可以簡化爲in_array($ status,range(0,$ n))

使用in_array &範圍是性價比更高的代碼,所以如果你確定你只需要對兩個不同的值進行嘗試,而不是使用==運算符。

1

做法可能是使用開關():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 
    } 
} 
?>