Req #79421 [Opn->Dup]: foreach (array_keys($arr) as $k) is slow
Edit report at https://bugs.php.net/bug.php?id=79421&edit=1
ID: 79421
Updated by: cmb@php.net
Reported by: michael dot vorisek at email dot cz
Summary: foreach (array_keys($arr) as $k) is slow
-Status: Open
+Status: Duplicate
Type: Feature/Change Request
Package: Performance problem
PHP Version: 7.4.4
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Closing as duplicate of bug #77532.
Previous Comments:
------------------------------------------------------------------------
[2020-04-10 18:43:25] michael dot vorisek at email dot cz
As long as iterate thru the whole dataset, otherwise it can be orders of magnitude slower.
$c = 20000;
// create test array
$arr = [];
for ($i = 0; $i < 1000; $i++) {
$arr[$i . 'x'] = $i . 'y'; // use sting keys, they may be slower than
numeric ones
}
$t = microtime(true);
for ($i = 0; $i < $c; $i++) {
foreach ($arr as $k => $ignore) {
$u = $k . '.'; // use key
break;
}
}
var_dump(round(microtime(true) - $t, 6));
$t = microtime(true);
for ($i = 0; $i < $c; $i++) {
foreach (array_keys($arr) as $k) {
$u = $k . '.'; // use key
break;
}
}
var_dump(round(microtime(true) - $t, 6));
------------------------------------------------------------------------
[2020-04-10 07:00:55] alexinbeijing at gmail dot com
Interestingly, benchmarking shows that the 2nd form of the code you show here is actually *slower*
than the 1st.
I don't know if foreach(array_keys(...) as ...) has already been optimized internally, but in
any case, it doesn't seem that this suggested optimization is necessary. Recommend this ticket
can be closed.
------------------------------------------------------------------------
[2020-03-27 19:50:24] michael dot vorisek at email dot cz
Description:
------------
This is a feature request to optimize:
foreach (array_keys($arr) as $k) {}
instead of building array of keys optimize this in PHP internally to behave like:
foreach ($arr as $k => $ignore) {}
It is important to optimize it as foreach on keys is very commonly used.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=79421&edit=1
Thread (4 messages)