1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

for Schleife verkehrt

Dieses Thema im Forum "PHP & Co." wurde erstellt von timroh, 14.01.10.

  1. timroh

    timroh Cripps Pink

    Dabei seit:
    08.07.09
    Beiträge:
    148
    Hallo,
    Gibt es eine Möglichkeit eine For Schleife von hinten nach vorne zu lesen ( bei einem Array)

    normal:
    $array = array(deutschland, schweiz);
    for($a=0; $a < count($array); $a++){
    echo $array[$a]. "<br>";
    }
    Ausgabe:
    deutschland
    schweiz


    meine Überlegung
    $array = array(deutschland, schweiz);
    for($a=count($array); $a > 0; $a--){
    echo $array[$a]. "<br>";
    }
    Ausgabe:

    schweiz


    Ich will aber das alle Daten ausgegeben werden.
    Danke schon im Voraus für die Antworten.
    Mit freundlichen Grüssen
    Tim Rohner
     
  2. Hairy

    Hairy Sonnenwirtsapfel

    Dabei seit:
    07.08.07
    Beiträge:
    2.397
    for($a=count($array); $a >= 0; $a--){


    (Erklärung: das erste Element eines Array hat immer Index 0. Deine Lösung zählt aber nur bis 1 runter, nicht bis 0.)
     
  3. gKar

    gKar Maunzenapfel

    Dabei seit:
    25.06.08
    Beiträge:
    5.362
    Und dann sollte man lieber bei count($array)-1 anfangen zu zählen! Das ist doch der Index des letzten Elements. Bei z.B. Count=5 lauten die Indizes 0 bis 4.
    (Ich möchte lieber gar nicht erst wissen, was beim Zugriff auf $array[count($array)] passiert...)
     
  4. creative7even

    creative7even Jerseymac

    Dabei seit:
    23.02.05
    Beiträge:
    454
    leider nichts - php liefert NULL (bzw. einen leeren string) - wirft jedoch keine Exception.
    Die schnellste Lösung wäre:

    Code:
    $items = array('one','two','three');
    $items = array_reverse($items);
    
    foreach($items as $key => $value) {
      ...
    }
    
    foreach- sind übringends schneller als for - Schleifen - und das nicht nur in der Ausführung.
     
  5. _linx_

    _linx_ Kleiner Weinapfel

    Dabei seit:
    04.01.09
    Beiträge:
    1.125
    Allerdings kann ein $array[count($array)] - wenn es am falschen Ort ist - schnell einen neuen Index erstellen, was unter Umständen erhebliche "Skriptstörungen" hervorrufen kann…
     
  6. knalli

    knalli Stechapfel

    Dabei seit:
    19.01.10
    Beiträge:
    159
    $array[count($array)] ist so ein böser und falscher Code, das man den sofort mit "böse, falsch" im Gedächtnis ablegen sollte!

    Zwei Anmerkungen: Erstens kann man mit der Forschleife entsprechend der ersten Worten auch mehr, bspw. jeden zweiten, dritten Wert nehmen: for ($i = 0; $i < $c; $i+=2). Zudem lassen sich im ersten Teil auch weitere initialisieren. (s.u.)

    Zweitens ist foreach in PHP laufzeitmäßig nie schneller als das klassische for-$i. Außerdem sorgt das array_reverse im konkreten Falle für einen absurden Overhead, der mit einer rückwärtslaufenden Schleife einfach zu umgehen ist.

    Dazu kommt, dass der Bedingungsteil bei jeder Ausführung auf's neue ausgeführt wird. Das beudeutet also, dass gem. Post 1 jedes Mal die Elemente im Array gezählt werden. Die ändern sich aber definitiv nicht, denn eine verändernde Anzahl der Array-Elemente in PHP zwar möglich, aber das will man nicht (bitte nicht mal auf die Idee kommen).

    Die idealste Schleife ist daher für PHP:

    Code:
    // $array
    for ($i = 0, $c = count($array); $i < $c; $i++) {
      ...
    }
    
    Der erste Block wird nur einmal ausgeführt.

    Für Maps, oder assoziative Arrays, sind foreach natürlich am einfachsten und besten. Ohne Frage.
     

Diese Seite empfehlen