Performance der Algorithmen: while/foreach

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Performance der Algorithmen: while/foreach

    Quellcode

    1. <?
    2. $startzeit = microtime(); //Der aktuelle Unix-Timestamp/Zeitstempel in Mikrosekunden
    3. //Ihr Skript
    4. $range = range(1,1000);
    5. $i = 0;
    6. foreach($range as $range){
    7. echo $i;
    8. $i++;
    9. }
    10. echo '<br /><br />';
    11. $endzeit = microtime() - $startzeit; //Differenz des jetzigen Zeitstempel mit dem vom Anfang
    12. echo 'Ausführzeit: '. round ($endzeit, 6) .' Sekunden';
    13. ?>
    Alles anzeigen


    Quellcode

    1. <?
    2. $startzeit = microtime(); //Der aktuelle Unix-Timestamp/Zeitstempel in Mikrosekunden
    3. //Ihr Skript
    4. $range = range(1,1000);
    5. function foreach2($array){
    6. $num = count($array);
    7. $i = 0;
    8. while($i < $num){
    9. echo $i;
    10. $i++;
    11. }
    12. }
    13. foreach2($range);
    14. echo '<br /><br />';
    15. $endzeit = microtime() - $startzeit; //Differenz des jetzigen Zeitstempel mit dem vom Anfang
    16. echo 'Ausführzeit: '. round ($endzeit, 6) .' Sekunden';
    17. ?>
    Alles anzeigen



    Was glaubt ihr, wer schneller war?

    Code1: Ausführzeit: 0.001211 Sekunden
    Code2: Ausführzeit: 0.001161 Sekunden

    Und es lag _immer_ in etwa in diesem Bereich.
    Ich hatte mir das schon gedacht, aber eine Begründung fällt mir nicht ein.

    Warum ist die while-Schleife trotz mehr Code und allem schneller als die foreach-Schleife?



    Gruß
  • Du hast da einen ganz großen Unterschied.

    In der while Schleife hast du keinen Array Zugriff. Du zählst nur i hoch.
    In der foreach hingegen wird der Wert in der lokalen Variable $range gespeichert (übrigens unschön sie genauso zu benennen).

    Außerdem ist foreach viel mächtiger. Weil nicht jedes Array von 0 bis 10 läuft. Wenn du die Mächtigkeit davon haben willst, musst du in der while mit list() und each() arbeiten.