Spiceman .. para los test de for() y foreach() te faltó poner el código de los test.
Yo hice los mios (aprovechando y usando tus fuciones sobre microtime):
Código PHP:
<?php
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;
}
$array=Array(1,2,3,4,5,6,7);
echo "<b>Tiempos</b>:<br><br>\n";
$empezo_foreach = microtime();
foreach ($array as $valor){
}
$lapso_foreach = microtime_diff($empezo_foreach, microtime());
printf("foreach: %0.8f segundos<br>\n", $lapso_foreach);
reset($array);
$empezo_for = microtime();
for ($i=0; $i<= count($array); $i++){
}
$lapso_for = microtime_diff($empezo_for, microtime());
printf("for: %0.8f segundos<br>\n", $lapso_for);
?>
Como se observa en el for .. uso count() para obtener el total de elementos del array .. Simulando lo que hace exactamente el forecha() a la hora de "parar" de leer el array cuando llega al final del último elemento.
No uso funciones para el codio a testear (he de ahí parte de los resultado y su resusltados .. pero la comparativa sirve igual).
Los resultados fueron (en tres iteracciones consecutivas):
foreach: 0.00025300 segundos
for: 0.00047600 segundos
foreach: 0.00024300 segundos
for: 0.00054600 segundos
foreach: 0.00025300 segundos
for: 0.00046200 segundos
Usando para el caso de test del for:
Código PHP:
$empezo_for = microtime();
$total_array=count($array);
for ($i=0; $i<= $total_array; $i++){
}
Los resultados fueron (en tres iteracciones consecutivas):
foreach: 0.00025300 segundos
for: 0.00031600 segundos
foreach: 0.00026400 segundos
for: 0.00034200 segundos
foreach: 0.00023600 segundos
for: 0.00039800 segundos
Al sacar fuera de cada iteraccion del bucle for el count() ganamos algo de tiempo .. acercandose al foreach() ..
Conclusión (bajo mis test y el código presentado):
Gana foreach() .. tambien se ve algo mas estable en cuanto a tiempos de respuesta en cada ejecución.
Test usando:
PHP 4.3.0RC1 en Windows98.
Un saludo,