代码之家  ›  专栏  ›  技术社区  ›  nerkn

如何在PHP中使用不同的间隔

  •  1
  • nerkn  · 技术社区  · 14 年前

    我需要解决下面这样的问题。我不确定,你能推荐更好的方法吗?

    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 回复  |  直到 11 年前
        1
  •  2
  •   yodabar Arkana    14 年前
    
    if ($price <= 20) {
            thankAndEscape(); 
    } elseif ($price <= 70) {
            accept();
    } elseif ($price <= 100) {
            negotiate(); 
    } else {
            tooHigh(); 
    }
    
    1. 在少数情况下,switch(true)是必需的;在case关键字中使用表达式进行检查意味着语法根本不适合,这是使用if…elseif构造的一个很好的理由。
    2. switch…case语法在php中的性能比if…高,否则 违约 case,所以给出了我建议的解决方案(有一个默认的case),我不会使用switch…case语法。
    3. 通过进行逐级检查,从最低价格范围开始逐步增加,您不必检查整个范围,因为间隔的第一个点肯定大于上一个检查的最后一个点。我建议的解决方案简单、可靠,而且性能更好。

    尝试并发布结果/您的印象(感谢有关性能的信息:)

    干杯!

        2
  •  2
  •   Glycerine    14 年前
    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之间”的陈述简化为高于20小于70。更有效,更容易阅读。

        3
  •  1
  •   greg0ire    14 年前
    if ($price>100)
    {
            tooHigh(); 
    }
    elseif($price<=100) && ($price>70))
    {
            negotiate(); 
    }
    elseif(($price<=70) && ($price>20))
    {
            accept(); 
    }
    elseif ($price<=20)
    {
            thankAndEscape(); 
    }
    

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

        4
  •  -3
  •   user488149    14 年前

    使用do while。

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

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