2011-01-20 58 views
5

舉止異常我有個PHP數組鍵值07和08

$months[01] = 'January'; 
$months[02] = 'February'; 
$months[03] = 'March'; 
$months[04] = 'April'; 
$months[05] = 'May'; 
$months[06] = 'June'; 
$months[07] = 'July'; 
$months[08] = 'August'; 
$months[09] = 'September'; 
$months[10] = 'October'; 
$months[11] = 'November'; 
$months[12] = 'December'; 

數組現在陣列不允許關鍵07 & 08不能輸出正確的值。

試試做print_r($months)你將不會得到任何關鍵值AugustSeptember的零關鍵指數。

儘管我可以通過刪除前導零來解決問題,但我仍然很想知道原因。

即使PHP編輯器發現了一些問題,但無法確定問題所在。

由於

回答

9

前面附加0前的數是指PHP解析它在同樣的方式,在前面加上0X導致它被解析爲一個十六進制值的八進制值。刪除零,它會正常工作。

echo 07; // prints 7 
echo 010; // prints 8 

這指定UNIX權限時主要用於:

chmod("myfile", 0660); 

除了它是很少的東西,你想要做的事。

這在PHP Manual中描述。

+0

Thanx,這解釋了一些事情。 – 2011-01-22 09:29:27

2

通常,在數字上加上前導0會告訴編譯器,您提供了一個八進制數(基數爲8,而不是基數爲10)。

在八進制中,8和9不存在(8是010,9是011),所以你很迷惑php。

如果你真的想要一個前導零,您可以使用字符串爲您的索引

2

PHP將把數字與0領先的八進制數,要麼丟棄0領先或將鍵值引號。

3

您形成integer literal的方式很重要。

查看十進制文字的結構?注意前面的零點是不是該模式的一部分?

要麼你必須刪除零,或把你的數組鍵作爲字符串

$months['01'] = 'January'; 
$months['02'] = 'February'; 
// etc... 
0

我只是調試和表頭撞寶貴的幾分鐘後,意識到這一點。
問題是,PHP不會引發錯誤,甚至不會警告錯誤的八進制文字整數。它只是忽略了直到文字結尾的錯誤部分。
該死的。

PS:誰使用八進制數?從來沒有,從來沒有聽說過有人使用它們有一個很好的理由。
十六進制很好,但八進制?該死的。
即使對於許可我通常做chmod ugo+rwx更直接。