2017-10-07 64 views
-1

我有一些代码的麻烦:解析错误:无效的数字文字中,如果块

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

基本上如果2号是等于给定的号码,我希望它输出了一个月,这导致高达所有月份。 一切运作良好的数字08和09,我似乎无法修复它。 据我所知这与php本身有关,我试图把数字放在一个字符串和整数无济于事。

+0

变化'08'到'8'。或者$ IDKood [3]。 $ IDKood [4]'结果? – Jeff

+0

你可以检查这个echo $ IDKood [3]。 $ IDKood [4],如果您比较*数字*,则不会在数字前面加上'0',或者将其解释为八进制数(8/9不允许在八进制数中),那么会给您带来什么结果 –

+0

。如果你比较字符串,把'08'in引号'08' – Jakumi

回答

1

PHP中的整数文字是八进制如果它以前导零开头。剔除前导零点,你就可以超过七点!

the manual

To use octal notation, precede the number with a 0 (zero).

而且,你似乎与数字来比较字符串。如果$ IDKood是一个字符数组,那么也许你应该做一个字符串比较:

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

..though为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'); 
+0

..一个XY的经典案例这是问题。 – Jeff

+0

[它不需要是'09''](https://3v4l.org/9VHDR),因为他使用'==',而不是'==='。 *编辑*尽管我认为你的意思是为了能够与前面的零进行比较。 – ishegg

+0

@ishegg这是真的,但它也没有受到伤害,而且我认为它更清楚了代码的匹配程度。 –

1

虽然@MattGibson已经给了正确的(当然,这似乎是IMO)answser,我只是想指出的是,有一个更好的方式来实现它是什么样子,你想实现的。

1路:
与所有月份

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

,使其更好,genarate一个int的列的$IDKood[3] . $IDKood[4]数组:

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