Это буквально ответит на все ваши вопросы массивов в PHP
В основном они не являются массивами. Это карты, которые выглядят как массивы.
http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
Следующая я вытащил из текущего 5.5.2 источника:
Внутренний ULONG nNextFreeElement не будет увеличиваться больше, таким образом, давая эту ошибку
(nNextFreeElement теперь LONG_MAX который уже заняты)
от источника PHP:
if (zend_hash_next_index_insert(Z_ARRVAL_P(container), &new_zval, sizeof(zval *), (void **) &retval) == FAILURE) {
zend_error(E_WARNING, "Cannot add element to the array as the next element is already occupied");
retval = &EG(error_zval_ptr);
Z_DELREF_P(new_zval);
}
Вот часть кода, которая, я считаю, возвращает сбой в этом случае (поскольку индекс LONG_MAX уже занят). В этом вызове флаг = HASH_NEXT_INSERT.
if ((p->nKeyLength == 0) && (p->h == h)) {
if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) {
return FAILURE;
}
....
Не может быть, чтобы массив заполнялся от 0 до MAX целочисленного значения. И поскольку это максимум, вы не можете добавить еще один элемент в массив? – bestprogrammerintheworld
Почему вы даже пытаетесь использовать 2 миллиарда элементов? –
Он работает [здесь] (http://codepad.org/8fyIoxZ7). Возможно, ваша версия PHP устарела. –