我想根据课程的数量设置一个$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
发布于 2015-04-09 03:49:10
您的部分问题是060是八进制表示法。这就解释了48个问题。http://php.net/manual/en/language.types.integer.php
而且,正如其他人所指出的,您不能在if语句中使用一堆>=。
发布于 2015-04-09 03:44:51
考虑语句中的逻辑流。
当遇到行if ($matches[1] >= 060)且$matches[1]值为180时,条件为true,因此执行代码块。因此,$levelNumber被赋值为"2“。
因为对其余的条件使用elseif,所以永远不会对它们进行评估(第一个条件已经满足了)。
最简单的解决方案可能是更改if语句的顺序,以首先检查更大的值。
https://stackoverflow.com/questions/29529337
复制相似问题