Сделайте заявление if короче - PullRequest
0 голосов
/ 08 октября 2009

Hay all, у меня есть 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";
  }
}

РЕДАКТИРОВАТЬ: в основном $a будет любое число (положительное или отрицательное), и мы сопоставим его следующим образом.

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

  • + 0,00 до +/- 2,00 - Стандарт
  • + / - от 2,25 до +/- 4,00 - тонкий
  • + / - от 4,25 до +/- 8,00 - сверхтонкий

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

Ответы [ 6 ]

10 голосов
/ 08 октября 2009

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

$b = abs($a);
if ($b <= 2) {
    echo "standard";
} else if ($b <= 4) {
    echo "thin";
} else if ($b <= 8) {
    echo "super thin";
}
6 голосов
/ 08 октября 2009

Что по этому поводу:

 $a = abs($a);
 if($a<=2) echo "standard";
 elseif($a<=4) echo "thin";
 elseif($a<=8) echo "super thin";
4 голосов
/ 08 октября 2009

Это примерно так просто:

<?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;
}
?>
1 голос
/ 08 октября 2009

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

$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;
  }
}

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

0 голосов
/ 08 октября 2009

Всегда лучше использовать 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;

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

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

0 голосов
/ 08 октября 2009
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";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...