所以我需要经历四个条件,我认为最好在PHP中使用switch
语句。但是,我需要检查一个整数是否小于或等于,或大于等于。
switch ($count) {
case 20:
$priority = 'low';
break;
case 40:
$priority = 'medium';
break;
case 60:
$priority = 'high';
break;
case 80:
$priority = 'severe';
break;
}
使用if()
语句,它将如下所示:
if ($count <= 20) {
$priority = 'low';
}
if ($count <= 40) {
$priority = 'medium';
}
这可以在switch-case
吗?
答案 0 :(得分:109)
解决此问题的更一般情况是:
switch (true) {
case $count <= 20:
$priority = 'low';
break;
case $count <= 40:
$priority = 'medium';
break;
case $count <= 60:
$priority = 'high';
break;
default:
$priority = 'severe';
break;
}
答案 1 :(得分:3)
交换机无法做到这一点,但在这种特殊情况下,您可以执行以下操作:
switch ((int)(($count - 1) / 20)) {
case 0:
$priority = 'low';
break;
case 1:
$priority = 'medium';
break;
case 2:
$priority = 'high';
break;
case 3:
$priority = 'severe';
break;
}
因此,在(int)(($count - 1) / 20)
中,0到20之间的所有值将eval为0,21到40将eval为1,依此类推,允许您为此目的使用switch语句。
由于我们是连接值,我们甚至可以简化为数组:
$priorities = ['low', 'medium', 'high', 'severe'];
$priority = $priorities[(int)(($count - 1) / 20)];
答案 2 :(得分:3)
有一种方法适用于使用三元赋值运算符的php 7。操作员之前已经介绍过(5.4?)但我从未测试过其他版本的代码。我编写了整个切换代码there,但为简洁起见,这只是具体的条款。让我们说我们希望条件匹配所有大于或等于五的数字:
switch($value){
case ($value >= 5?$value:!$value)://do something here
break;
}
我们要么允许$值传递不变,要么根据条件否定该值。 $ value将始终与自身匹配或未通过测试而反对其否定。
答案 3 :(得分:0)
没有。 switch()
语句用于执行多个相等测试。
if (x == 'a') { ... }
else if (x == 'b') { ... }
else if (x == 'c') { ... }
代码。无法将switch()
从==
更改为<
或任何其他比较运算符。它严格用于平等测试。
答案 4 :(得分:0)
使用三元运算符怎么办?
$priority =
// "switch" comparison for $count
$count <= 20 ? 'low' :
($count <= 40 ? 'medium' :
($count <= 60 ? 'high' :
// default above 60
'severe'));
我知道一个常见的抱怨,即三元运算符可能很难理解,但是使用简单的?:
太容易做到这一点。
其运行方式类似于Excel的“如果”公式
=IF( logical_test, value_if_true, value_if_false )
$variable = logical_test ? value_if_true : value_if_false
您可以嵌套if语句(将第二个?:
放在第一个的'value_if_false'部分中),这肯定会使它变得难以读取,但是在您将其写出时却不太容易如上所述,逐行。
我上面的代码基本上等效于OP编写的if()
语句。
答案 5 :(得分:-1)
我也可以确认@bytepunk答案在这里正常。
此外,使用PHP 7扩展概念
switch ($interval->days)
{
case 0:
return '1 day';
// break;
case (($interval->days >= 1 && $interval->days <= 7) ?? $interval->days):
return '1 week';
// break;
case (($interval->days >= 8 && $interval->days <= 31) ?? $interval->days):
return '1 month';
// break;
case (($interval->days >= 31 && $interval->days <= 93) ?? $interval->days):
return '2-3 months';
// break;
default:
return '3+ months';
}
我会承认这不是最干净的代码,因此也许用类似静态的纯函数包装每种情况将使事情变得整洁,并且不要忘记为每个函数命名(或使用参数创建一个泛型函数) )以匹配大小写。这将使其更具可读性。