如何在PHP中使用不同的Interval

时间:2010-10-26 21:30:23

标签: php algorithm

我需要解决下面的问题。我不确定,你能提出更好的方法吗?

switch(true){
    case $price>100:
        tooHigh(); 
    break;
    case (($price<=100) && ($price>70)):
        negotiate(); 
    break;
    case (($price<=70) && ($price>20)):
        accept(); 
    break;
    case ($price<=20):
        thankAndEscape(); 
    break;
}

4 个答案:

答案 0 :(得分:2)

if($price > 100)
{
  //too high
  tooHigh()
}
elseif($price > 70) //it wasn't greater than 100 - is it greater than 70?
{
  //negotiate
  negotiate()
}
elseif($price > 20) //OK, wasn't greater than 70 OR 100 - greater than 20 then?
{
  //accept
  accept()
}
else //Guess not - just don't do anything
{
  //thank and escape
  thankAndEscape()
}

不幸的是,案例陈述不能做条件。他们真的是“如果是这样的话......那么残酷的诚实”

这应该有效,因为条件会直到下一个直到达到底部。如果一个匹配 - 声明的其余部分被忽略......那就是我的逻辑是正确的......

我认为您不需要进行范围匹配,因为它已经是if语句的原生匹配。例如。在70分钟和20分之间的陈述在分离的条件下简化为低于70的20以上。更有效,更容易阅读。

答案 1 :(得分:2)


if ($price <= 20) {
        thankAndEscape(); 
} elseif ($price <= 70) {
        accept();
} elseif ($price <= 100) {
        negotiate(); 
} else {
        tooHigh(); 
}
  1. 在少数情况下需要switch(true);你使用case关键字中的表达式进行检查的事实意味着语法完全不适合,这是使用if ... elseif结构的一个很好的理由。
  2. switch ... case语法在PHP中的性能比如果......还有更高的性能,如果没有默认的话,所以考虑到我建议的解决方案(有默认情况),我会不要使用switch ... case语法。
  3. 通过逐步检查,从最低价格范围开始并逐步增加,您不必检查整个范围,因为间隔的第一个点肯定大于上一个检查的最后一个。我建议的解决方案更简单,更坚固,更好的表现。
  4. 尝试并发布结果/您的印象(感谢有关表演的信息:)

    干杯!

答案 2 :(得分:1)

if ($price>100)
{
        tooHigh(); 
}
elseif($price<=100) && ($price>70))
{
        negotiate(); 
}
elseif(($price<=70) && ($price>20))
{
        accept(); 
}
elseif ($price<=20)
{
        thankAndEscape(); 
}

看起来更紧凑和可读,不是吗?

答案 3 :(得分:-3)

使用do-while。

do {

if($price > 100) { tooHigh(); break; }

} while(false);

http://php.net/manual/de/control-structures.do.while.php