Возможный дубликат:
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 )
Ваши индексы рассматриваются как восьмеричные числа из-за ведущих нулей.
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 – фактически незаконные номера).
Отрежьте ведущий ноль, и все в порядке;)