2017-10-07 47 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.