2015-06-09 60 views
2

所以我有一个变量命名bestmatchrule返回1-25现在林间试图分配一个号码的名称使用下面的if语句单号:如何压缩if语句代码?

$a=$bestmatchrule; 
$b=''; 

if ($a == "1" || "2") { 
     $b="Chesil House"; 
} elseif ($a == "3" || "4") { 
     $b="Corfe House"; 
} elseif ($a == "5" || "6") { 
     $b="Cranborne House"; 
} elseif ($a == "7" || "8") { 
     $b="Dorchester House"; 
} elseif ($a == "9" || "10") { 
     $b="Lyme Regis House"; 
} elseif ($a == "11" || "12") { 
     $b="Okeford House"; 
} elseif ($a == "13" || "14") { 
     $b="Purbeck House"; 
} elseif ($a == "15" || "16") { 
     $b="Student Village"; 
} elseif ($a == "17" || "18" || "19") { 
     $b="Unilet"; 
} elseif ($a == "20") { 
     $b="Conel Court"; 
} elseif ($a == "21" || "22") { 
     $b="St John's Road"; 
} elseif ($a == "23" || "24" || "25") { 
     $b="Private Let"; 
} else { 
    "Please Try Again"; 
} 

问题是,它不工作。它只返回最上面的一个。这是返回值还是if语句的问题?

此外,如果有缩短它的方法,使其看起来更好?我更关注功能,但必须有比这更好的方法吗?

在此先感谢! (p。对不起noob问题!)

+2

在猜测你可能需要更接近的东西:'if($ a ==“1”|| $ a ==“2”)...'至于更好的方法,显而易见的将是一个数组。 –

+0

将此数组转换为数组可能会更加容易 –

+0

array'$ x = array(1 =>'Chesil House',2 =>'Chesil House',3 =>'Corfe House')...' –

回答

4

$a == "1" || "2"是不是一个有效的声明。它需要是$a == "1" || "$a == 2"。这是你的错误。

至于缩短这一点,你可以做的不多。您可以使用in_array()缩短一些陈述,但您并没有真正有用的地方。

if ($a == "1" || $a == "2") { 
     $b="Chesil House"; 
} elseif ($a == "3" || $a == "4") { 
     $b="Corfe House"; 
} elseif ($a == "5" || $a == "6") { 
     $b="Cranborne House"; 
} elseif ($a == "7" || $a == "8") { 
     $b="Dorchester House"; 
} elseif ($a == "9" || $a == "10") { 
     $b="Lyme Regis House"; 
} elseif ($a == "11" || $a == "12") { 
     $b="Okeford House"; 
} elseif ($a == "13" || $a == "14") { 
     $b="Purbeck House"; 
} elseif ($a == "15" || $a == "16") { 
     $b="Student Village"; 
} elseif (in_array($a, array("17", "18","19")) { 
     $b="Unilet"; 
} elseif ($a == "20") { 
     $b="Conel Court"; 
} elseif ($a == "21" || $a == "22") { 
     $b="St John's Road"; 
} elseif (in_array($a, array("23", "24", "25")) { 
     $b="Private Let"; 
} else { 
    echo "Please Try Again"; 
} 

你也可以使用一个数组来保存你的值,其中$a值是关键。然后只是检查它是否在阵列中,如果是,分配值:

$array = [ 
    1 => "Chesil House", 
    2 => "Chesil House", 
    3 => "Corfe House", 
    4 => "Corfe House", 
    5 => "Cranborne House", 
    6 => "Cranborne House", 
    7 => "Dorchester House", 
    8 => "Dorchester House", 
    9 => "Lyme Regis House", 
    10 => "Lyme Regis House", 
    11 => "Okeford House", 
    12 => "Okeford House", 
    13 => "Purbeck House", 
    14 => "Purbeck House", 
    15 => "Student Village", 
    16 => "Student Village", 
    17 => "Unilet", 
    18 => "Unilet", 
    19 => "Unilet", 
    20 => "Conel Court", 
    21 => "St John's Road", 
    22 => "St John's Road", 
    23 => "Private Let", 
    24 => "Private Let", 
    25 => "Private Let" 
]; 

if (isset($array[$a])) { 
    $b = $array[$a]; 
} 
else { 
    echo "Please Try Again"; 
} 
+0

是英雄! 很多很多感谢你! – user3122952

1

John Conde的答案可能是你想要的。另一种可能性是渐进式的(<)报表。

$a= (int) $bestmatchrule; 
$b=''; 

if ($a < 3) { 
     $b="Chesil House"; 
} elseif ($a < 5) { 
     $b="Corfe House"; 
} elseif ($a < 7) { 
     $b="Cranborne House"; 
} elseif ($a < 9) { 
     $b="Dorchester House"; 
} elseif ($a < 11) { 
     $b="Lyme Regis House"; 
} elseif ($a < 13) { 
     $b="Okeford House"; 
} elseif ($a < 15) { 
     $b="Purbeck House"; 
} elseif ($a < 17) { 
     $b="Student Village"; 
} elseif ($a < 20) { 
     $b="Unilet"; 
} elseif ($a < 21) { 
     $b="Conel Court"; 
} elseif ($a < 23) { 
     $b="St John's Road"; 
} elseif ($a < 26) { 
     $b="Private Let"; 
} else { 
    "Please Try Again"; 
} 

switch语句也是一种选择,但我不认为这会更好。