php count braucht Zeit

Von neffets, 2. August 2010

Ich hatte es bisher nur gehört, aber nicht geglaubt. Die PHP count Funktion braucht Zeit. Test-Szenario: Nicht durch ein Array durch-iterieren (per foreach copy-Operation der Felder), sondern nur die Größe des Array benutzen.

<?php
define('MAX', 10000) ;
//
$A=array() ;
for ($i=1 ; $i<MAX ; $i++) { $A['string'.$i] = 'val'.$i ; }
//
$b=MAX ; $T=microtime() ;
// Durch-Zählen mit count
for ($i=0 ; $i<count($A) ; $i++) { $b-- ; }
echo "Lauf 1 = " . (microtime()-$T) ." ms\n" ;
//
$b=MAX ; $T=microtime() ;
// Durchzählen mit fester ausgerechneter Variable
for ($i=0 ; $i<$b ; $i++) { $b-- ; }
echo "Lauf 2 = " . (microtime()-$T) ." ms\n" ;
//
$b=MAX ; $T=microtime() ;
// dasselbe aber runterzählen auf 0
for ($i=MAX ; $i ; $i--) { $b-- ; }
echo "Lauf 3 = " . (microtime()-$T) ." ms\n" ;
?>

Ergebnis:

Lauf 1 = 0.002382 ms
Lauf 2 = 0.000343 ms
Lauf 3 = 0.000666 ms

Übrigens bleiben die Verhältnisse gleich, auch wenn man das Array wesentlich vergrößert.

Bei benutzen der count-Funktion in der for-Schleife braucht er etwa 7-mal länger.

Erstaunlich ist aber auch die dritte Schleife, wo eigentlich zu vermuten wäre, dass ein Vergleich auf "$i" (also Not Null) schnelle wäre als ein echter Vergleich zwischen zwei Variablen.
Das Runterzählen braucht 2mal so lange wie das Hochzählen.

Bereich