note 127563 added to function.array-shift

From: Date: Wed, 31 Aug 2022 20:12:04 +0000
Subject: note 127563 added to function.array-shift
Groups: php.notes 
Request: Send a blank email to php-notes+get-219504@lists.php.net to get a copy of this message
A simple benchmark (PHP 8.1.9 + macOS 12.4) <?php ini_set('memory_limit', -1); $times = 25_000; $length = 256; $arr = []; $random = random_bytes(($times + $length) / 2); $random = bin2hex($random); // benchmark array_shift() for ($i = 0; $i < $times; $i++) { $arr[$i] = substr($random, $i, $length); } $shiftTimer = -hrtime(true); for ($i = 0; $i < $times; $i++) { $value = array_shift($arr); } $shiftTimer += hrtime(true); // benchmark array_reverse() + array_pop() + array_reverse() for ($i = 0; $i < $times; $i++) { $arr[$i] = substr($random, $i, $length); } $reverseTimer = -hrtime(true); for ($i = 0; $i < $times; $i++) { $arr = array_reverse($arr); $value = array_pop($arr); $arr = array_reverse($arr); } $reverseTimer += hrtime(true); // benchmark array_reverse() + array_pop() for ($i = 0; $i < $times; $i++) { $arr[$i] = substr($random, $i, $length); } $popTimer = -hrtime(true); $arr = array_reverse($arr); for ($i = 0; $i < $times; $i++) { $value = array_pop($arr); } $popTimer += hrtime(true); // benchmark $arr[key()]+ unset(key()) for ($i = 0; $i < $times; $i++) { $arr[$i] = substr($random, $i, $length); } $keyTimer = -hrtime(true); reset($arr); for ($i = 0; $i < $times; $i++) { $key = key($arr); $val = $arr[$key]; unset($arr[$key]); } $keyTimer += hrtime(true); print_r([ 'shift' => $shiftTimer / (10 ** 9), 'reverse' => $reverseTimer / (10 ** 9), 'pop' => $popTimer / (10 ** 9), 'key' => $keyTimer / (10 ** 9), ]); ?> Results interpretation: On an array of 25,000 unique items, each item a string of 256 byte: and key() + unset() is very fast. array_shift() is ~400 times slower array_reverse() + array_pop() + array_reverse() is ~5,000 times slower. p.s. I'm implementing a queue, so I need to add another array_reverse() after array_pop() which makes it extremely slow inside a loop. array_reverse() + array_pop() has no use for me, I just added for sake of checking it's performance. It is as fast as key() + unset(). ---- Server IP: 45.112.84.4 Probable Submitter: 185.85.3.173 (proxied: 5.45.102.119) ---- Manual Page -- https://php.net/manual/en/function.array-shift.php Edit -- https://main.php.net/note/edit/127563 Del: integrated -- https://main.php.net/note/delete/127563/integrated Del: useless -- https://main.php.net/note/delete/127563/useless Del: bad code -- https://main.php.net/note/delete/127563/bad+code Del: spam -- https://main.php.net/note/delete/127563/spam Del: non-english -- https://main.php.net/note/delete/127563/non-english Del: in docs -- https://main.php.net/note/delete/127563/in+docs Del: other reasons-- https://main.php.net/note/delete/127563 Reject -- https://main.php.net/note/reject/127563 Search -- https://main.php.net/manage/user-notes.php

« previous php.notes (#219504) next »