2015-06-09 2 views
2

Поэтому у меня есть переменная с именем bestmatchrule, который возвращает единственное число между 1-25 и теперь Im пытается присвоить этому номеру имя, используя следующее, если заявление:Как сжать код инструкции 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.s. извините за вопрос noob!)

+2

Угадайте, что вам, вероятно, нужно что-то ближе: 'if ($ a ==" 1 "|| $ a ==" 2 ") ...' Что касается лучших способов, то очевидным будет массив. –

+0

преобразование этого в массив, вероятно, будет esier –

+0

массив '$ x = массив (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

Джона 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 также является вариантом, но я не думаю, что было бы намного лучше.

Смежные вопросы