yo tenía mal el código (calculaba el tiempo con una variable mal porque habia escrito $empezofor en vez de $empezoFor).
Código PHP:
<?php
for ($i = 0; $i < 10000; $i++) { $array[$i] = $i;}
function microtime_diff($a, $b) {
list($a_dec, $a_sec) = explode(" ", $a);
list($b_dec, $b_sec) = explode(" ", $b);
return $b_sec - $a_sec + $b_dec - $a_dec;
}
function ejecutarFor() {
global $array;
$copia = $array;
for ($i=0; $i < 10; $i++) { for ($i = 0; $i < 10000; $i++) { $copia[$i]++; } }
}
function ejecutarForeach() {
global $array;
$copia = $array;
for ($i=0; $i < 10; $i++) { foreach ($copia as $key => $value) { $copia[$key]++; } }
}
$empezoFor = microtime();
ejecutarFor();
$lapsoFor = microtime_diff($empezoFor, microtime());
$empezoForeach = microtime();
ejecutarForeach();
$lapsoForeach = microtime_diff($empezoForeach, microtime());
echo "<br><br><b>Tiempos</b>:<br><br>\n";
printf("for: %0.3f segundos<br>\n", $lapsoFor);
printf("foreach: %0.3f segundos<br>\n", $lapsoForeach);
?>
Con este código me da:
Tiempos:
for: 0.060 segundos
foreach: 0.984 segundos
reemplazando
foreach ($copia as $key => $value) { $copia[$key]++; }
por
foreach ($copia as $value) {$copia[$value]++; }
Tiempos:
for: 0.067 segundos
foreach: 0.977 segundos
parece no haber diferencia, habría que testearlo bien con un array asociativo con todas las de la ley.