XaraX: geschwindigkeit von for-Schleifen

Beitrag lesen

Re:

hier würde ich foreach() verwenden...

Hm, begründe mal bitte!

Foreach() arbeitet die Kette der Elemente ab, so wie sie vorhanden sind.
Man könnte also vorher auch einzelne Elemente mit unset() 'herausschießen'
die For-Schleife sucht in der Kette die Indexe, die aber auf den Elementen stehen, und NICHT den Platz in der Kette repräsentieren.
Wenn einer fehlt, gibt es einen Fehler.

Das genaue Gegenteil ist mir ersichtlich:

eddi@eddi:~> eddi g-test 10000

for_c           : 27.102898836136
foreach         : 25.85285615921
for             : 13.902323961258
Durchlaeufe     : 10000

OS      : Linux SuSe 9.1 prof
SAPI    : cli
Version : 5.0.3

Bitte überprüfe es mal:

<?php
ini_set('max_execution_time',200);
ini_set('memory_limit','50M');
$d=time();
$u=$argv[1] ? $argv[1] : 1;

$a=file('test1.txt');

sleep(1); $start=explode(' ',microtime()); $start=$start[1].substr($start[0],-9);

for($i=0;$i<$u;$i++)
 {
 for($j=0;$j<count($a);$j++);
 }

$end=explode(' ',microtime()); $end=$end[1].substr($end[0],-9); echo 'for_c  : '.str_pad(($end-$start),16)."\n";
 unset($j,$i); sleep(1); $start=explode(' ',microtime()); $start=$start[1].substr($start[0],-9);

for($i=0;$i<$u;$i++)
 {
 foreach($a as $v);
 }

$end=explode(' ',microtime()); $end=$end[1].substr($end[0],-9); echo 'foreach  : '.str_pad(($end-$start),16)."\n";
 unset($v,$i); sleep(1); $start=explode(' ',microtime()); $start=$start[1].substr($start[0],-9);

for($i=0;$i<$u;$i++)
 {
 for($j=0;$a[$j];$j++);
 }

$end=explode(' ',microtime()); $end=$end[1].substr($end[0],-9); echo 'for  : '.str_pad(($end-$start),16)."\n";
 echo 'Durchlaeufe : '.$u;
?>

test1.txt ist ein 1050112 Byte große Datei, die mit file() ein Datenfeld mit Index 0-1535 erzeugt 1/3 der Strings ist 1.0 kB, 1/3 ist 0.67 kB und 1/3 ist 0.33 kB groß.

Nach wie vor würde mich du interessieren, da ich den Befehl noch nicht kannte.

Gruß aus Berlin!
eddi