解析错误:if块中的数字文字无效

时间:2017-10-07 22:16:43

标签: php

我遇到了一些代码问题:

else if ($IDKood[3] . $IDKood[4] == 08) {
            $Month = "August";
        }
        else if ($IDKood[3] . $IDKood[4] == 09) {
            $Month = "September";
        }

基本上如果2个数字等于给定数字,我希望它输出一个月,这导致所有月份。 一切都运行良好,直到08和09号,我似乎无法解决它。 据我所知,这与php本身有关,我试图将数字放在字符串和整数中无济于事。

2 个答案:

答案 0 :(得分:1)

PHP中的整数文字在 octal 中,如果它以前导零开头。敲掉领先的零,你就可以超过七!

来自the manual

  

要使用八进制表示法,请在数字前面加上0(零)。

此外,您似乎在将字符串与数字进行比较。如果$ IDKood是一个字符数组,那么也许你应该进行字符串比较:

if ($IDKood[3] . $IDKood[4] == '09') {

..虽然正如ishegg观察到的那样,只要你敲掉领先的零点,implicit conversion from string to integer就可以了:

if ($IDKood[3] . $IDKood[4] == 9) {

说了这么多,如果您只是将一个数字转换为月份名称,可能会better ways to do it

 $dateObj   = DateTime::createFromFormat('!m', (int) ($IDKood[3] . $IDKood[4]));
 $monthName = $dateObj->format('F');

答案 1 :(得分:1)

虽然@MattGibson已经给出了正确的(好吧,它似乎是iMO)回答者,但我只是想指出有一种更好的方法来实现它想要实现的目标。

第一种方式:
有一个包含所有月份的数组

$months = [...,'08'=>"August", "09"=>"September",...];
// then 
$Month = $months[$IDKood[3] . $IDKood[4]];
// no need for all the elseifs

为了让它更好,请从$IDKood[3] . $IDKood[4]中创建一个int:

$monthIndex = intval($IDKood[3] . $IDKood[4]);
// now you can use the built in dateTime-class to get the string for this month.
相关问题