我有一个if条件,其中包含四个或运算符,并且有可能在将来更多或运算符条件可以添加到if语句中。我想知道有没有办法可以重构条件或改进它。
$setRequired = FALSE;
if($conditionValue['value1'] || $conditionValue['value2'] || $conditionValue['value3'] || $conditionValue['value4']){
$setRequired = TRUE;
}
任何帮助都会被贬低。
答案 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];
}