Это ошибка в PHP?

Возможный дубликат:
php-массив ведет себя странно с ключевым значением 07 & 08

Я нашел что-то странное в PHP, если я использую числовые массивы, 8-й массив игнорируется, здесь, когда я помещаю «Cherry» в $ fruit [08], php-швы, чтобы перешагнуть через него.

Что происходит ? Это ошибка или что-то еще.

<pre> <?php $fruit[01] = "Apples"; $fruit[02] = "Pears"; $fruit[03] = "Bananas"; $fruit[04] = "Grape"; $fruit[05] = "Orange"; $fruit[06] = "Peach"; $fruit[07] = "Lemon"; $fruit[08] = "Cherry"; $fruit[09] = "Mango"; print_r($fruit); ?> </pre> 

Вывод:

 Array ( [1] => Apples [2] => Pears [3] => Bananas [4] => Grape [5] => Orange [6] => Peach [7] => Lemon [0] => Mango ) 

Related of "Это ошибка в PHP?"

Ваши индексы рассматриваются как восьмеричные числа из-за ведущих нулей.

08 и 09 будут оцениваться как ноль, поэтому ваша последняя запись («Манго») заканчивается индексом массива 0.

08 рассматривается как восьмеричный.

Не используйте начальные нули.

В этом случае не используйте явные индексы для создания массивов:

 $fruit = array( "Apples", "Pears", etc ); 

(или для PHP 5.4 и новее):

 $fruit = [ "Apples", "Pears", etc ]; 

Поскольку вы набрали 08, а не 8 PHP, вы думаете, что говорите о значении, которого нет. В восьмеричных числах пробегают от 00 до 07. Чтобы PHP позаботился о значениях для вас, введите:

 <pre> <?php $fruit[] = "Apples"; $fruit[] = "Pears"; $fruit[] = "Bananas"; $fruit[] = "Grape"; $fruit[] = "Orange"; $fruit[] = "Peach"; $fruit[] = "Lemon"; $fruit[] = "Cherry"; $fruit[] = "Mango"; print_r($fruit); ?> </pre> 

Короче говоря, это не ошибка, но это одна из тех вещей, которые вас поймают, если вы этого не ожидали.

Вы используете восьмеричную нотацию для индексов массива. 09 и 09 являются недопустимыми восьмеричными числами (8 десятичных чисел – 010 в восьмеричной нотации и 9 десятичных чисел – 011 в восьмеричной нотации). Недопустимые числа оцениваются в 0, поэтому «Cherry» будет закрыто с помощью «Mango».

Числовые массивы не нуждаются в ведущих нулях. Если это вызывает проблемы для вас, удалите все ведущие нули из индексов. Кроме того, вы можете добавлять элементы в массив с помощью $array[] вместо фактического указания индекса.

PHP обрабатывает целые числа как восьмеричные, а не десятичные числа, когда они начинаются с нуля. Попробуйте использовать правильные индексы, например 1, 2, 3 вместо 01, 02, 03.

BTW, в массивах PHP начинается с 0.

PHP обрабатывает ваши индексы массива как восьмеричные, а не десятичные числа из-за ведущих «0». Удалите все, и все должно работать нормально!

Кроме того, вы можете это знать, но на всякий случай, если нет, индексы массива начинаются с 0, а не 1.

Это связано с тем, что вы используете 01, 02, 03 и т. Д. (Ведущий ноль). Для PHP это восьмеричные числа. И восьмеричные числа варьируются от 0-7 (так что 08 и 09 – фактически незаконные номера).

Отрежьте ведущий ноль, и все в порядке;)