2015-12-11 37 views
-3

我有一個如果條件,其中有四個或運營商在它可能在未來更多或運營商條件可以添加在if語句。我想知道有什麼方法可以重構條件或改進它。我如何重構這個條件?

$setRequired = FALSE; 
if($conditionValue['value1'] || $conditionValue['value2'] || $conditionValue['value3'] || $conditionValue['value4']){ 
    $setRequired = TRUE; 
} 

任何幫助將被處理。

+0

是字 '值' 固定的嗎? –

+1

在這個問題中沒有足夠的上下文信息來知道這是否可以改進。如果這是其複雜性的總和,則不需要重構它。如果它以某種方式阻礙你,你只需要重構它。 – Flosculus

+0

在所有變量上做一段時間循環 – mikus

回答

1

嘗試使用EnumSet。

我通常會用這一個

if(condA()) { 
    if(condB()) { 
    //foo 
    } else { //!condB 
    //bar 
    } else { //!condA 
    //etc 
    } 
0

創建要檢查

$referenceKeys = array('value1','value2','value3','value4'); 

您可以根據需要添加到這個鍵的數組。

然後初始陣列上環和做一個if子句來檢查初始狀態第一和如果當前關鍵是基準鍵陣列英寸

foreach($conditionValue as $key=>$value){ 
    if ($value and in_array($key,$referenceKeys)){ 
     $setRequired = TRUE; 
    } 
} 
1

if是好的,你唯一可以做的事情,以使其更具可讀性,如果你有更多的條件如下面的例子來格式化:

if(
    $conditionValue['value1'] 
    || $conditionValue['value2'] 
    || $conditionValue['value3'] 
    || $conditionValue['value4'] 
) { 
    $setRequired = TRUE; 
} 

如果你只是想知道如果$conditionValue陣列中的任何值爲真,則可以使用in_array()。這隻有當你的陣列看起來像在下面的示例工作:

$conditionValue = array(
    "value1" => false, 
    "value2" => true, 
    "value3" => false, 
    "value4" => false, 
    "value5" => false, 
    "value6" => false 
); 

$setRequired = FALSE; 

if(in_array(true, $conditionValue)){ 
    $setRequired = TRUE; 
} 
+1

這是最好的答案。雖然OP可能會要求(而其他人在回答)巧妙的「少量代碼字符」解決方案,但它們都不明顯,而代碼「應該」是顯而易見的。 – Flosculus

+1

我認爲有一個可讀的代碼更重要,然後是一些神奇的代碼,看起來很瘋狂,但沒有人能夠看到條件是否成立。在我看來,我總是[this](http://stackoverflow.com/a/316233/5297359) – swidmann

0

通過鍵值嘗試foreach循環:

$setRequired = FALSE; 
$variables = array('value1','value2','value3','value4'); 
foreach ($variables AS $var) { 
    if ($conditionValue[$var]) { 
     $setRequired = TRUE; 
     break; 
    } 
} 
0

談論速度,我認爲,您的實際解決方案是最好的。在談論可讀性或可維護性時,也許你可以總結所有的值和測試結果。

假設$ conditionValue [ 'valueX'] = 0爲真或假的1(或-1或東西<> 0),你可以添加你的所有$ conditionValues然後只測試和結果<> 0

例如:

$sumResult = $conditionValue['value1'] + $conditionValue['value2'] + .. + $conditionValue['valueX']; 

if($sumResult){ 
    $setRequired = TRUE; 
} 

注意如果$ conditionValue [「valueX」]可以包含這招不起作用正反兩方面的值。

如果值1,值.. valueX是連續的,你也可以使用一個循環,用於相加$ conditionValue(S)

for ($i = 1; $i <= $lastValueToTest; $i++) { 
    $sumResult = $sumResult + $conditionValue['value' . $i]; 
}