"foreach ($arr as $k => $v)" is 2 times as faster as "foreach ($arr as
$v)" in php4.3.x
both test under lastest cvs.
4.3.12-dev
testing with array[] = string
$v: 2.5590002536774
$k=>$v: 0.7020001411438
$v each()
: 1.025000333786
$k $v each()
: 1.1790001392365
testing with array[] = array(string)
$v: 0.50299978256226
$k=>$v: 0.70599985122681
$v each()
: 0.9909999370575
$k $v each()
: 1.172000169754
5.1.0-dev
testing with array[] = string
$v: 0.15599966049194
$k=>$v: 0.19999980926514
$v each()
: 0.78099966049194
$k $v each()
: 0.77299976348877
testing with array[] = array(string)
$v: 0.16900014877319
$k=>$v: 0.19900012016296
$v each()
: 0.71399998664856
$k $v each()
: 0.77100014686584
<?php
function mtime()
{
list($s, $ms) = explode(' ', microtime()
);
return $s + $ms;
}
function stopwatch()
{
static $now;
$old = $now;
$now = mtime();
return $now - $old;
}
function runtest($arr)
{
$count = 1000;
stopwatch();
for ($i = 0; $i < $count; $i ++);
$extra = stopwatch();
stopwatch();
for ($i = 0; $i < $count; $i ++) {
$r = $arr;
foreach ($r as $v) $dummy = $v;
}
echo '$v:', "\t", stopwatch() - $extra, "\n";
stopwatch();
for ($i = 0; $i < $count; $i ++) {
$r = $arr;
foreach ($r as $key => $v) $dummy = $v;
}
echo '$k=>$v:', "\t", stopwatch() - $extra, "\n";
stopwatch();
for ($i = 0; $i < $count; $i ++) {
$r = $arr;
reset($r);
while (list(, $v) = each($r)) $dummy = $v;
}
echo '$v `each()`:', "\t", stopwatch() - $extra, "\n";
stopwatch();
for ($i = 0; $i < $count; $i ++) {
$r = $arr;
reset($r);
while (list($k, $v) = each($r)) $dummy = $v;
}
echo '$k $v `each()`:', "\t", stopwatch() - $extra, "\n";
}
echo PHP_VERSION, "\n";
echo "testing with array[] = string\n";
$arr = array();
for ($i = 0; $i < 100; $i ++) {
$arr[] = str_repeat('-', 10240);
}
runtest($arr);
echo "testing with array[] = array(string)\n";
$arr = array();
for ($i = 0; $i < 100; $i ++) {
$arr[] = array(str_repeat('-', 10240));
}
runtest($arr);
echo "testing with queryAll\n";
[quote: http://ez.no/community/blog/foreach_performance_improvement_backport]
This patch improves performance with foreach() where the key of the
array element is not interesting (for example foreach($array as
$value); ).
[/quote]