Im Allgemeinen gibt es drei Methoden zum Durchlaufen eines Arrays: for, while und foreach. Die einfachste und bequemste davon ist foreach. Was sind also die Unterschiede in der Bedienung und Leistung? Welche Methode ist normalerweise besser zu verwenden?
Testen wir zunächst die Zeit, die zum Durchlaufen eines eindimensionalen Arrays mit 50.000 Indizes benötigt wird:
Testplattform:
CPU: P-M 725
Speicher: 512M
Festplatte: 40G 5400 U/min
Betriebssystem: Windows XP SP2
WEB: Apache 2.0.54 php5.0.4
Testcode:
$arr = array();
for($i = 0; $i < 50000; $i ){
$arr[] = $i*rand(1000,9999);
}
function GetRunTime()
{
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec (float)$ sec);
}
####################################
$time_start = GetRunTime();
for($i = 0; $i < count($arr); $i ){
$str .= $arr[$i];
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Verwendete Zeit von für:'.round($time_used, 7) .'(s )
';
unset($str, $time_start, $time_end, $time_used);
############## #### ##################
$time_start = GetRunTime();
while(list($key, $val) = Each($arr )){
$str .= $val;
}
$time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo ' Verwendete Zeit von while:'.round($time_used, 7).'(s)
';
unset($str, $key, $val, $time_start , $time_end, $ time_used);
###################################
$time_start = GetRunTime ();
foreach($arr as $key => $val){
$str .= $val;
}
$ time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'Verwendete Zeit von foreach:'.round($time_used, 7).'(s)
# ###############################
>
Testergebnisse:
Mitteln Sie die drei Testergebnisse:
entspricht for, while, foreach bzw.
0,1311650
0,1666853
0,1237440
Nach Wiederholung Bei Tests zeigen die Ergebnisse, dass für das Durchlaufen desselben Arrays „foreach“ am schnellsten und „while“ am langsamsten ist. foreach ist etwa 20 bis 30 % schneller als while. Erhöhen Sie dann den Array-Index auf 500000 und 5000000, und die Testergebnisse sind dieselben. Aber aus prinzipieller Sicht arbeitet foreach an einer Kopie des Arrays (durch Kopieren des Arrays), während while durch Verschieben des internen Index des Arrays arbeitet. Im Allgemeinen wird angenommen, dass while schneller sein sollte als foreach (weil foreach platziert zuerst das Array, während while den internen Zeiger direkt bewegt, aber das Ergebnis ist genau das Gegenteil. Der Grund dürfte darin liegen, dass es sich bei foreach um eine interne Implementierung von PHP handelt, während es sich bei while um eine allgemeine Schleifenstruktur handelt.
Daher bevorzuge ich in allgemeinen Anwendungen die Verwendung der foreach-Form, die einfach und effizient ist. Unter PHP5 kann foreach auch die Attribute einer Klasse durchlaufen.
Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!