Performance of array_shift and array_pop in PHP

We have confirmed that array_shift is much slower than array_pop in PHP.

Code:

<?

// Create an array with 100000 elements

$array = array(); for ($i = 0; $i < 100000; $i++) { $array[] = rand(); }

// Remove the last 1000 elements using array_pop

$start = microtime(true); for ($i = 0; $i < 1000; $i++) { array_pop($array); } $stop = microtime(true); printf(“array_pop takes %.5f seconds\n”, $stop – $start);

// Add back 1000 elements

for ($i = 0; $i < 1000; $i++) { $array[] = rand(); }

// Remove the first 1000 elements using array_shift

$start = microtime(true); for ($i = 0; $i < 1000; $i++) { array_shift($array); } $stop = microtime(true); printf(“array_shift takes %.5f seconds\n”, $stop – $start);

// Add back 1000 elements

for ($i = 0; $i < 1000; $i++) { $array[] = rand(); }

// Remove the first 1000 elements by reversing the array and popping 1000 elements

$start = microtime(true); $array_rev = array_reverse($array); for ($i = 0; $i < 1000; $i++) { array_pop($array_rev); } $stop = microtime(true); printf(“array_reverse + array_pop takes %.5f seconds\n”, $stop – $start);

?>

Result:

array_pop takes 0.00089 seconds
array_shift takes 15.15544 seconds
array_reverse + array_pop takes 0.03934 seconds