ID: 36975
Comment by: crescentfreshpot at yahoo dot com
Reported By: ateixeira at gmail dot com
Status: Open
Bug Type: Arrays related
Operating System: *
PHP Version: 5.1.3RC3
New Comment:
This seems like an array_pop() bug to me.
This behaviour happens when array indices are 'out of order' and you
then use array_pop(). Any subsequent 'pushing' onto the end of the
array fails.
Using either the empty-square-bracket syntax or array_push() will both
fail. Square-bracket syntax issues the warning, array_push() does not.
Re: pushing new values onto the end of an array, the docs state: "the
maximum of the existing integer indices is taken, and the new key will
be that maximum value + 1"
It seems the engine cannot generate the next index after array_pop()
does it's thing.
Smaller reproduce code:
<?php
error_reporting(E_ALL);
$list = array(1 => 'foo', 0 => 'baz');
array_pop($list);
$list[] = 'bar'; // <- fails, issues warning
array_push($list, 'bar'); // <- fails, no warning
print_r($list);
?>
Expected Result
---------------
Array
(
[1] => foo
[2] => bar
[3] => bar
)
Actual Result
-------------
Warning: Cannot add element to the array as the next element is already
occupied in C:\Dev\webserver_root\t.php on line 5
Array
(
[1] => foo
)
Previous Comments:
------------------------------------------------------------------------
[2006-04-04 21:06:37] ateixeira at gmail dot com
Description:
------------
After using natcasesort, using the array_pop and array_push (or arr[] =
$value construct) in conjunction cause the following error (on
array_push):
Warning: Cannot add element to the array as the next element is
already occupied in xxxxx.php on Line xx
Also, the value doesn't get pushed onto the array.
Reproduce code:
---------------
$fileList = array('aa', 'aa', 'bb', 'bb', 'cc', 'cc');
$test = natcasesort($fileList);
if ($test) {
echo "natcasesort success!\n";
}
$val = array_pop($fileList);
$fileList[] = $val;
print_r($fileList);
Expected result:
----------------
natcasesort success!
Array
(
[0] => aa
[1] => aa
[2] => bb
[3] => bb
[4] => cc
[5] => cc
)
Actual result:
--------------
natcasesort success!
PHP Warning: Cannot add element to the array as the next element is
already occupied in /webroot/root/projects/RPMfe/j.php on line 10
Warning: Cannot add element to the array as the next element is already
occupied in /webroot/root/projects/RPMfe/j.php on line 10
Array
(
[0] => aa
[1] => aa
[3] => bb
[2] => bb
[5] => cc
)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=36975&edit=1