首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的if语句会停留在第一个值上?

为什么我的if语句会停留在第一个值上?
EN

Stack Overflow用户
提问于 2015-04-09 03:39:51
回答 2查看 101关注 0票数 0

我想根据课程的数量设置一个$levelNumber。所以我做了以下几件事:

代码语言:javascript
复制
  <?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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-09 03:49:10

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

而且,正如其他人所指出的,您不能在if语句中使用一堆>=。

票数 1
EN

Stack Overflow用户

发布于 2015-04-09 03:44:51

考虑语句中的逻辑流。

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

因为对其余的条件使用elseif,所以永远不会对它们进行评估(第一个条件已经满足了)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29529337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档