|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-04-04 21:06 UTC] 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
)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 08:00:01 2025 UTC |
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 )