我有一系列使用相同结构和语法的if
/ elseif
条件语句,我想在foreach
内清理和压缩代码,以便更轻松随着列表的增长添加和删除项目。我刚开始看起来像这样:
if ( $condition1 == 1 && ( $condition2 == 1 || $condition3 == 1 ) ) {
$var = 'string 1';
} elseif ( $condition1 == 2 && ( $condition2 == 2 || $condition3 == 2 ) ) {
$var = 'string 2';
} elseif ( $condition1 == 3 && ( $condition2 == 3 || $condition3 == 3 ) ) {
$var = 'string 3';
} elseif ( $condition1 == 4 && ( $condition2 == 4 || $condition3 == 4 ) ) {
$var = 'string 4';
} else {
$var = 'default string';
}
理想情况下,我会将其结构更像:
$conditions = array(
'string 1' => 1,
'string 2' => 2,
'string 3' => 3,
'string 4' => 4,
);
foreach ( $conditions as $key => $value ) {
if ( $condition1 == $value && ( $condition2 == $value || $condition3 == $value ) )
$var = $key;
}
if ( empty($var) )
$var = 'default string';
这里最大的问题是我希望第一次迭代后的所有if
语句都是elseif
,以防万一满足多个条件,所以我可以按照中的项目顺序控制层次结构。阵列。此外,这种方法可能完全错误,并且可以有更好的方法来完全解决问题,所以我对所有批评都持开放态度!
答案 0 :(得分:2)
您可以稍微重新排列代码以执行您需要的操作。如果满足条件,则break
离开循环("模拟" elseif条件),并在循环之前放置默认值,因此,如果没有满足条件,则值为1 :
$conditions = array(
'string 1' => 1,
'string 2' => 2,
'string 3' => 3,
'string 4' => 4,
);
$var = 'default string';
foreach ( $conditions as $key => $value ) {
if ( $condition1 == $value && ( $condition2 == $value || $condition3 == $value ) ) {
$var = $key;
break;
}
}