我正在写一堆条件,使用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";
}
我发现它很乱,有没有办法重写这个?
答案 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];
}
}