При использовании php
array_fill и отрицательных индексов, почему php
только заполняет первый отрицательный индекс, а затем переходит к 0.
Например:
array_fill(-4,4,10)
должен заполнять -4, -3, -2, -1
и 0
но это -4, 0, 1, 2, 3
В руководстве указано это поведение, но не почему.
Может ли кто-нибудь сказать, почему это так?
Глядя на источник для PHP, я могу понять, почему они это сделали!
Они создают первую запись в массиве. В PHP это выглядит так:
$a = array(-4 => 10);
Затем они добавляют каждую новую запись следующим образом:
$count--; while ($count--) { $a[] = 10; }
Если вы сделаете это точно так же, вы увидите то же самое поведение. Сверхбуквенный PHP-скрипт демонстрирует это:
<?php $a = array(-4 => "Apple"); $a[] = "Banana"; print_r($a); ?>
Результат: Array ( [-4] => Apple [0] => Banana )
ПРИМЕЧАНИЕ. Да, я использовал PHP вместо источника C, который они использовали, поскольку программист PHP может понять это намного лучше, чем исходный источник. Это примерно такой же эффект, однако, поскольку они используют функции PHP для генерации результатов …
Возможно, потому что это указано в документе: http://www.php.net/manual/en/function.array-fill.php
Если start_index отрицательный, первым индексом возвращаемого массива будет start_index, и следующие индексы начинаются с нуля (см. Пример).