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) вы не получите никакого ключевого значения August и индекс нулевого ключа за September .

Хотя я могу решить проблему, удалив ведущий ноль, все же мне хотелось бы узнать причину того же.

Даже редактор PHP видит какую-то проблему, но не может сказать, в чем проблема.

благодаря

Solutions Collecting From Web of "php-массив ведет себя странно с ключевым значением 07 & 08"

Предполагая, что 0 до числа означает, что PHP анализирует его как восьмеричное значение таким же образом, что добавление 0x заставляет его анализироваться как шестнадцатеричное значение. Удалите нуль, и он будет работать нормально.

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

Это чаще всего используется при указании разрешений unix:

 chmod("myfile", 0660); 

Кроме того, это редко то, что вы хотели бы сделать.

Это описано в Руководстве по PHP .

Важное значение имеет способ формирования целочисленного литерала .

См. Структуру десятичных литералов? Обратите внимание, что предыдущий ноль не является частью этого шаблона?

Либо вы должны удалить нули, либо обрабатывать ключи массива в виде строк

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

Как правило, помещание ведущего 0 в число сообщает компилятору, что вы указываете восьмеричное число (база 8, а не база 10).

В восьмеричных 8 и 9 не существует (8 – 010, 9 равно 011), поэтому вы путаете php.

Если вам действительно нужен ноль, вы можете использовать строки для своих индексов

PHP будет обрабатывать числа с ведущим 0 как восьмеричные числа, либо отбрасывать ведущее 0, либо вводить ключевые значения в кавычки.

Я просто понял это после драгоценных минут отладки и стука в стол.
Проблема в том, что PHP не вызывает ошибки или даже предупреждения о том, что он исказил восьмеричное целое число. Он просто игнорирует часть от ошибки до конца литерала.
Черт.

PS: Кто использует восьмеричные цифры? никогда не слышал, чтобы кто-то использовал их по уважительной причине.
Шестнадцатеричный большой, но восьмеричный? черт.
Даже для разрешения я обычно делаю chmod ugo+rwx более простым.