为什么我的if语句卡在第一个值上?

时间:2015-04-09 03:39:51

标签: php if-statement

我想根据课程数量设置$levelNumber。所以我做了以下事情:

  <?php
    $s = "Lesson 001: Vocabulary";
    preg_match("/([0-9]+)/", $s, $matches);
    echo $matches[1]; // => 001

    if ($matches[1] >= 060) {
      $levelNumber = "2"; 
    } elseif ($matches[1] >= 120) {
      $levelNumber = "3";
    } elseif ($matches[1] >= 180) {
      $levelNumber = "4";
    } elseif ($matches[1] >= 240) {
      $levelNumber = "5";
    } elseif ($matches[1] >= 300) {
      $levelNumber = "6";
    } elseif ($matches[1] >= 360) {
      $levelNumber = "7";
    } else {
      $levelNumber = "1";
    }
  ?>

但是现在无论课程有多​​大(例如180$levelNumber总是输出2。当课程在1下时,它会输出048。我真的很困惑。

这是课程的正确级别:

  

第1级:第1至第60课

     

第2级:第61至120课

     

第3级:第121至180课

     

4级:第181至240课

     

第5级:第241至300课

     

等级6:经验教训301至360

     

等级7:经验教训361至420

2 个答案:

答案 0 :(得分:1)

考虑你的陈述中的逻辑流程。

当遇到行if ($matches[1] >= 060)并且$matches[1]的值为180时,条件为true,因此代码块将执行。因此,$levelNumber被赋值为“2”。

因为您对其余条件使用elseif,所以从不评估它们(第一个条件已经满足)。

最简单的解决方案可能是更改if语句的顺序,以便首先检查更大的值。

答案 1 :(得分:1)

你的部分问题是060是八进制表示。这解释了48问题。 http://php.net/manual/en/language.types.integer.php

并且,正如其他人所指出的那样,你不能在你的if语句中使用一堆&gt; =。