简化表达

时间:2013-09-10 01:20:31

标签: php

我正在写一堆条件,使用if语句,有没有办法简化这个以使它看起来更好?

$value = "1";

      if (($subvalue == 1) && ($subbucket == 1)){
        $value = "1";
      }

      if (($subvalue == 1) && ($subbucket == 2){
        $value = "1A";
      }

      if (($subvalue == 1) && ($subbucket == 3)){
        $value = "2A";
      }

      if (($subvalue == 2) && ($subbucket == 1)){
        $value = "3A";
      }

      if (($subvalue == 2) && ($subbucket == 2)){
        $value = "3B";
      }

      if (($subvalue == 2) && ($subbucket == 3)){
        $value = "3C";
      }

我发现它很乱,有没有办法重写这个?

3 个答案:

答案 0 :(得分:3)

一般解决方案,如果您可以拥有任何密钥:

$lookup = array(
  1 => array(
    1 => "1",
    2 => "1A",
    3 => "2A"),
  2 => array(
    1 => "3A",
    2 => "3B",
    3 => "3C"));

$value = $lookup[$subvalue][$subbucket];
if (!$value) $value = "1";

否则,对于连续的积分键,如问题所示,

$lookup = array(
  array("1", "1A", "2A"),
  array("3A", "3B", "3C"));
$value = $lookup[$subvalue - 1][$subbucket - 1];
if (!$value) $value = "1";

答案 1 :(得分:0)

你认为这是简化的吗?

$arr = array('1', '1A', '2A', '3A', '3B', '3C');
$value = $arr[($subvalue - 1) * 3 + ($subbucket - 1)];
if (!$value) $value = "1";   // steal this line from @Amadan

另一种解决方案,与@Amadan的解决方案类似,将是

$arr = array( 1 => array(1 => '1', 2 => '1A', 3 => '2A'),
              2 => array(1 => '3A', 2 => '3B', 3=> '3C'));
$value = $arr[$subvalue][$subbucket];
if (!$value) $value = "1";

答案 2 :(得分:0)

尝试,例如:

$value = '1'; $res = array('1', '1A', '2A', '3A', '3B', '3C');
for($i=0,$n=1,$q=1; $i<6; $i++,$q++){
  if($i === 3){
    $n = 2; $q = 1;
  }
  if($subvalue === $n && $subbucket === $q){
    $value = $res[$i];
  }
}
相关问题