Micro-optimizaciones en PHP… desmitificadas!
Contar elementos de un arreglo y el for
Esta prueba es bastante interesante, debido a que siempre se lee en distintos foros sobre la diferencia entre el count() y el sizeof() y su implicancia en velocidad. Veamos el código aplicado:
<?php
define('NMAX',10);
for($i = 0; $i < NMAX; $i++) $arr[] = 'asdfqwerty'.$i;
$t = time() + microtime();
for ($i = 0; $i < count($arr); $i++) $tmp = $arr[$i];
$r[] = number_format((time()+microtime()) - $t,7,'.',',');
$t = time() + microtime();
$numero = count($arr);
for ($i = 0; $i < $numero; $i++) $tmp = $arr[$i];
$r[] = number_format((time()+microtime()) - $t,7,'.',',');
$t = time() + microtime();
for ($i = 0; $i < sizeof($arr); $i++) $tmp = $arr[$i];
$r[] = number_format((time()+microtime()) - $t,7,'.',',');
$t = time() + microtime();
$numero = sizeof($arr);
for ($i = 0; $i < $numero; $i++) $tmp = $arr[$i];
$r[] = number_format((time()+microtime()) - $t,7,'.',',');
unset($arr,$numero,$t,$tmp);
?>Tiempos:<ul><?php
foreach($r AS $a) echo '<li>Tiempo caso 1: '.$a.'</li>';
?></ul>;
Máximo de memoria ocupada: <strong><?php echo round(memory_get_peak_usage() / 1024); ?></strong> KiB<br>
Número de elementos: <strong><?php echo NMAX; ?></strong>.
Nuevamente, existen dos opciones: copian y pegan el código para probarlo en sus equipos o bien ven una prueba en vivo y en directo con 10 elementos.
Resultados
Esta vez, y a diferencia de la prueba anterior, no hubieron muchas sorpresas, más que los que esperaba encontrar:

Las pruebas son reveladoras: por lo general, es mucho mejor ocupar count() antes del for. La función sizeof si bien es cierto cumple exactamente el mismo cometido, es más lento que count() a medida que el tamaño del arreglo crece. Para arreglos enanos es mejor ocupar sizeof(), pero la diferencia es tan poca que es realmente despreciable. Mi consejo es que siempre se ocupe count() para revisar tamaños de arreglos.