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($aif($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;
}
?>