PHP-Array verhält sich merkwürdig mit Schlüsselwert 07 & 08

Ich habe ein Array für Monate

$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'; 

Jetzt gibt das Array keinen korrekten Wert für die Tasten 07 & 08 .

Probieren Sie print_r($months) Sie erhalten keinen Schlüsselwert August und keinen Schlüsselindex für September .

Obwohl ich das Problem lösen kann, indem ich die führende Null entferne, würde ich gerne den Grund dafür wissen.

Selbst der PHP-Editor sieht ein Problem, kann aber nicht sagen, wo das Problem liegt.

Vielen Dank

   

Das Voranstellen von 0 vor einer Zahl bedeutet, dass PHP es als oktalen Wert auf dieselbe Weise parst wie das Voranstellen von 0x es als hexadezimalen Wert analysiert. Entfernen Sie die Null, und es wird gut funktionieren.

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

Dies wird hauptsächlich beim Angeben von Unix-Berechtigungen verwendet:

 chmod("myfile", 0660); 

Abgesehen davon ist es selten etwas, was Sie tun möchten.

Dies ist im PHP-Handbuch beschrieben .

Die Art, wie Sie ein Integer-Literal bilden, ist wichtig.

Siehe die Struktur für dezimale Literale? Beachten Sie, dass eine vorangehende Null nicht Teil dieses Musters ist?

Entweder müssen Sie die Nullen entfernen oder Ihre Array-Schlüssel als Zeichenfolgen behandeln

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

Im Allgemeinen teilt eine führende 0 einer Zahl mit, dass Sie eine Oktalzahl angeben (Basis 8, nicht Basis 10).

In Oktal existieren 8 und 9 nicht (8 ist 010, 9 ist 011), also verwirren Sie PHP.

Wenn Sie wirklich eine führende Null wollen, können Sie Strings für Ihre Indizes verwenden

PHP behandelt Zahlen mit einer führenden 0 als Oktalzahlen, entweder die führende 0 oder die Schlüsselwerte in Anführungszeichen.

Das habe ich erst nach ein paar Minuten Debugging und Tischhämmern gemerkt.
Das Problem ist, dass PHP keinen Fehler oder gar eine Warnung darüber erzeugt, dass die oktale literale Ganzzahl falsch formatiert wurde. Es ignoriert nur den Teil vom Fehler bis zum Ende des Literals.
Verdammt.

PS: Wer benutzt Oktalzahlen? nie, nie gehört von jemandem, der sie aus einem guten Grund benutzt.
Hexadezimal ist großartig, aber oktal? Verdammt.
Selbst für die Erlaubnis mache ich normalerweise chmod ugo+rwx ist einfacher.