更高效的开关盒?

时间:2016-03-09 15:50:52

标签: php switch-statement

我看了很多,但也许我没有使用正确的术语。这似乎是检查3个字符串数组的非常低效的方法。

我正在查看数组中的每个项目并单独检查值。是否有更短的方法来实现相同的结果?

$j = get_field('loan_types');
$business = '<i class="fa fa-suitcase"></i>';
$property = '<i class="fa fa-home"></i>';
$personal = '<i class="fa fa-user"></i>';
switch ($j[0]) {
  case 'Business':
    echo $business;
    break;
  case 'Personal':
    echo $personal;
    break;
  case 'Property':
    echo $property;
    break;
}
switch ($j[1]) {
  case 'Business':
    echo $business;
    break;
  case 'Personal':
    echo $personal;
    break;
  case 'Property':
    echo $property;
    break;
}
switch ($j[2]) {
  case 'Business':
    echo $business;
    break;
  case 'Personal':
    echo $personal;
    break;
  case 'Property':
    echo $property;
    break;
}

2 个答案:

答案 0 :(得分:4)

由于$j是一个数组,你可以使用foreach循环,如下所示:

$j = get_field('loan_types');
$business = '<i class="fa fa-suitcase"></i>';
$property = '<i class="fa fa-home"></i>';
$personal = '<i class="fa fa-user"></i>';

foreach ($j as $loan_field) {
  switch ($loan_field) {
    case 'Business':
      echo $business;
      break;
    case 'Personal':
      echo $personal;
      break;
    case 'Property':
      echo $property;
      break;
  }
}

编辑:如果您真的喜欢冒险,请参阅CBroe'很棒的答案!

答案 1 :(得分:3)

你如何取消整个switch声明开头......?

如果您将要输出的值放在关联数组中,并使用贷款类型作为键,那么您可以将其缩短为

$j = get_field('loan_types');
$icons = array(
  'Business' => '<i class="fa fa-suitcase"></i>',
  'Property' => '<i class="fa fa-home"></i>',
  'Personal' => '<i class="fa fa-user"></i>',
);

foreach($j as $loan_field) {
  if(isset($icons[$loan_field])) {
    echo $icons[$loan_field];
  }
}