Php 缩短if语句

Php 缩短if语句,php,if-statement,Php,If Statement,好了,我有一个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 "standa

好了,我有一个
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";
  }
}
if($a<0){
如果($a>-2){
回声“标准”;
}埃尔塞伊夫(a-4美元){
回声“薄”;

}elseif($a 2.01&&$a 4.01&&$a您可以使用绝对值来缩短它:

$b = abs($a);
if ($b <= 2) {
    echo "standard";
} else if ($b <= 4) {
    echo "thin";
} else if ($b <= 8) {
    echo "super thin";
}
$b=abs($a);
如果($b这个怎么办:

 $a = abs($a);
 if($a<=2) echo "standard";
 elseif($a<=4) echo "thin";
 elseif($a<=8) echo "super thin";
$a=abs($a);
if($a
if($a<0)
{
如果($a>-2)回显“标准”;
elseif($a>-4)回声“稀薄”;
否则呼应“超薄”;
}
其他的
{
如果($a<2)回声为“标准”;

elseif($a>2.01&&$a 4.01&&&$a最好使用
开关
而不是
,否则如果
!它会使代码更干净和可扩展

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;
开关($a){
案例(-2<$a):
案例($a<2):
$r=‘标准’;
打破
案例(2.25>$a):
案例(-2.25<$a):
案例($a<4):
案例($a>-4):
$r=‘薄’;
打破
案例(4.25>$a):
案例(-4.25<$a):
病例($a<8):
案例($a>-8):
$r=‘超薄’;
打破
违约:
$r='超出范围';
} 
echo$r;

大小写表达式可以是任意大小写 计算结果为简单表达式的表达式 类型,即整数或 浮点数和字符串。 此处不能使用数组或对象 除非它们被解除对 简单类型


的文档中获取,或者您可以保留实际范围,允许范围端点不同(而不仅仅是绝对值),并允许轻松包含其他范围:

$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;
  }
}
$ranges=数组(
'标准'=>阵列(-2,2),
'细'=>数组(-4,4),
“超薄”=>数组(空,8),
);
foreach($key=>$range的范围){

如果((is_null($range[0])|a=>$range[0])&&(is_null($range[1])|a,这就很简单了:

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


我认为这是OP想要的。但是,请注意,原始代码没有为值>8生成输出。这是错误的。第一个语句捕获每个大于2的值,因此其他语句不会执行。另外,$b 4是多少(小于2,大于4)?也不适用于2到2.01之间或4到4.01之间的值-但我怀疑这实际上是故意的行为。因此,等等,你基本上看到了reiner的答案,意识到他在else if中不包含$b>=2的想法是好的,并将其替换为你自己的答案?即使在你编辑代码之后,你的代码也是错误的,因为它没有给出“超薄”的答案对于-100。警告:“$a=2.005”会发生什么?什么都没有?您的代码与您的描述不匹配。您的代码将显示“超薄”到-100。除非您不能对范围使用开关。
$x<$y<$z
在php中不是有效的表达式。@n1313:问题没有给出小于-8或大于8的值应该是什么。如果是,那么可以添加一个else条件。我不理解enamors新手对elseif的看法,因为它几乎不是最好的解决方案。对此进行表决。我的答案与此类似,还包括自定义范围和小于-8的值。@ringmaster:如果您转换为绝对值,则无论符号如何,这将始终有效,并且对于大于+/-8绝对值的值也有效。例如,如果值为
-9
(即
9
…由于
abs()
),
$size
将设置为
standard
,失败,然后
“瘦”
,再次失败,然后
“超薄”
,并再次失败…但循环将结束,
$size
仍将是
“超薄”
<?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;
}
?>