如果有条件,我怎么能重构这个?

时间:2015-12-11 09:35:48

标签: php if-statement conditional

我有一个if条件,其中包含四个或运算符,并且有可能在将来更多或运算符条件可以添加到if语句中。我想知道有没有办法可以重构条件或改进它。

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

任何帮助都会被贬低。

5 个答案:

答案 0 :(得分:1)

尝试使用EnumSet。

我一般会用这个

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

答案 1 :(得分: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;
}

答案 2 :(得分:0)

使用您要检查的键创建一个数组

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

您可以根据需要添加。

然后遍历初始数组并执行if子句以首先检查您的初始条件,如果当前密钥位于引用密钥数组中。

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

答案 3 :(得分:0)

尝试使用关键值的foreach循环:

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

答案 4 :(得分:0)

谈论速度我认为你的实际解决方案是最好的。

谈论可读性或可维护性,也许你可以总结所有的值和测试结果。

假设$ conditionValue [' valueX'] = 0表示false或1(或-1或某些<> 0)表示true,您可以将所有$ conditionValues相加,然后只测试总和结果<> 0

示例:

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

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

如果$ conditionValue [' valueX']可以包含正值和负值,请注意此技巧不起作用。

如果value1,value2 .. valueX是顺序的,你也可以使用一个循环来加起来$ conditionValue(s)

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