2009-10-08 4 views
0

Сено все, у меня есть заявление if. Как я мог сделать это как можно короче?Сделать заявление if короче

if ($a < 0){ 
    if($a > -2){ 
    echo "standard"; 
    }elseif($a <= -2 && $a > -4){ 
    echo "thin"; 
    }elseif($a <= -4){ 
    echo "super thin"; 
    } 

}else{ 
    if($a < 2){ 
    echo "standard"; 
    } 
    if($a > 2.01 && $a <= 4){ 
    echo "thin"; 
    } 
    if($a > 4.01 && $a <= 8.00){ 
    echo "super thin"; 
    } 
} 

EDIT: в основном $a будет любое число (положительное или отрицательное) и мы сопоставляем его, как это.

Если значение

  • +0,00 до +/- 2,00 - Стандартный
  • +/- 2,25 до +/- 4,00 - Тонкий
  • +/- 4,25 до +/- 8.00 - Супер тонкий

Дополнительные знаки для тех, кто знает, что это может быть использовано для :)

+0

РИСКОВАННАЯ: что происходит за "$ а = 2,005"? Ничего? – Piskvor

+0

Ваш код не соответствует вашему описанию. Ваш код даст «супер тонкий» до -100. – n1313

ответ

10

Вы можете сократить его с помощью абсолютного значения:

$b = abs($a); 
if ($b <= 2) { 
    echo "standard"; 
} else if ($b <= 4) { 
    echo "thin"; 
} else if ($b <= 8) { 
    echo "super thin"; 
} 
+0

Я думаю, что это то, чего хочет OP. Обратите внимание, однако, что исходный код не производит вывод для значений> 8. –

+1

Это неправильно. Первый оператор ловит каждое значение, которое больше 2, поэтому остальные не будут выполняться. Кроме того, какое количество $ b <= 2 && $b > 4 (менее двух и больше четырех)? – n1313

+0

А также не для значений между 2 и 2.01 или между 4 и 4.01 - но я сомневаюсь, что это на самом деле предназначенное поведение. –

6

Что об этом:

$a = abs($a); 
if($a<=2) echo "standard"; 
elseif($a<=4) echo "thin"; 
elseif($a<=8) echo "super thin"; 
+0

Как насчет -100? – n1313

+3

@ n1313: Вопрос не дает того, что должно быть меньше чем -8 или больше 8. Если это так, то к нему может быть добавлено другое условие. – Powerlord

0
if ($a < 0) 
{ 
    if($a > -2) echo "standard"; 
    elseif($a > -4) echo "thin"; 
    else echo "super thin"; 
} 
else 
{ 
    if($a < 2) echo "standard"; 
    elseif($a > 2.01 && $a <= 4) echo "thin"; 
    elseif($a > 4.01 && $a <= 8.00) echo "super thin"; 
} 
-6

всегда лучше использовать switch, а не else if! Это делает код более чистым и расширяемым.

switch($a) { 
    case (-2 < $a): 
    case ($a < 2): 
     $r = 'Standard'; 
    break; 

    case (2.25 > $a): 
    case (-2.25 < $a): 
    case ($a < 4): 
    case ($a > -4): 
     $r = 'Thin'; 
    break; 


    case (4.25 > $a): 
    case (-4.25 < $a): 
    case ($a < 8): 
    case ($a > -8): 
     $r = 'Super Thin'; 
    break; 

    default: 
     $r = 'Out of range'; 
} 

echo $r; 

Выражение случая может быть любым выражения, которое вычисляется в простой типа, то есть, число и строка с плавающей точкой или целой . Здесь не могут быть использованы массивы или объекты , если они не разыменованы в простых типах.

Взятые из документации на http://us3.php.net/manual/en/control-structures.switch.php

+3

Кроме того, вы не можете использовать переключатель для диапазонов. –

+2

'$ x <$ y <$ z' не является допустимым выражением в php. – ringmaster

1

Или вы можете держать фактические диапазоны, позволяют диапазон концов отличаться (а не только абсолютные значения), а также позволяет легко включить дополнительные диапазоны:

$ranges = array(
    'standard' => array(-2, 2), 
    'thin' => array(-4, 4), 
    'super thin' => array(null,8), 
); 
foreach($ranges as $key => $range) { 
    if((is_null($range[0]) || $a => $range[0]) && (is_null($range[1]) || $a <= $range[1])) { 
    echo $key; 
    break; 
    } 
} 

Первый подходящий диапазон в списке - тот, который подходит.

4

Это примерно так же просто, как он получает:

<?php 
$b = abs($a); 
$ranges = array(
    'standard' => 2, 
    'thin' => 4, 
    'super thin' => 8 
); 
foreach($ranges as $range=>$max) { 
    $size = $range; 
    if($b > $max) continue; 
    break; 
} 
?> 
+0

Я не понимаю, что такое новички-новички в отношении elseif, так как это вряд ли когда-либо лучшее решение. Голосование. Мой ответ аналогичен, а также включает пользовательские диапазоны и учетные записи для значений, меньших -8. – ringmaster

+0

@ringmaster: Если вы конвертируете в абсолютное значение, это всегда будет работать независимо от знака, и оно будет работать для значений больше абсолютного значения +/- 8. Например, если значение '-9' (т.е.' 9' ... из-за 'abs()'), '$ size' будет установлено в' standard', fail, then 'thin '', fail снова, затем '' супер тонкий'', и будет терпеть неудачу еще раз ... но тогда цикл будет закончен, а '$ size' будет по-прежнему« супертонким ». – KyleFarris

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