在foreach循环中重复if / elseif(PHP)

时间:2017-09-07 14:36:01

标签: php

我有一系列使用相同结构和语法的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,以防万一满足多个条件,所以我可以按照中的项目顺序控制层次结构。阵列。此外,这种方法可能完全错误,并且可以有更好的方法来完全解决问题,所以我对所有批评都持开放态度!

1 个答案:

答案 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;
  }
}