When we do something like:
<?php
$arr = array();
$arr[PHP_INT_MAX] = null;
$arr[] = null;
PHP gives the error message:
Warning: Cannot add element to the array as the next element is already occupied in /home/yca/script.php on line 4
Why does the engine say that the next element is already occupied?
Is this a PHP bug?
This will literally answer all your questions about arrays in php
Mostly that they are not arrays. They are maps that look like arrays.
http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
The following I pulled from the current 5.5.2 source:
The internal ulong nNextFreeElement will not increment any more thus giving this error
(the nNextFreeElement is now LONG_MAX which is already occupied)
From the PHP source:
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);
}
Here is the portion of code that I believe is returning a failure in this case (since the index LONG_MAX is already occupied). In this call the flag = HASH_NEXT_INSERT.
if ((p->nKeyLength == 0) && (p->h == h)) {
if (flag & HASH_NEXT_INSERT || flag & HASH_ADD) {
return FAILURE;
}
....
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With