bjoern: Mit foreach Array ab bestimmter Position auslesen

Guten Abend!

ich möchte mit foreach($array as $var) ein Array auslesen, aber erst mit dem 2tem eintrag starten, also das erste Arrayelement auslassen. Wie mache ich dies am besten?

Gruß bjoern

  1. Guten Abend!

    ich möchte mit foreach($array as $var) ein Array auslesen, aber erst mit dem 2tem eintrag starten, also das erste Arrayelement auslassen. Wie mache ich dies am besten?

    Gruß bjoern

    Außerdem währe es gut, zu wissen, wann das letzte Element des Arrays aufgerufen wird. Zuerst Einträge zählen und dann mit counter überprüfen? Aber wie?

    Gruß Bjoern

    1. Hallo bjoern!

      Das foreach existiert IMHO als vereinfachung, wenn man ein Array durchlaufen muss.  In JavaScript bspw. muss man stattdessen ein for (var i = 0; i < array.length; i++) schreiben.

      So kannst du in PHP doch auch ganz simpel starten: Du definierst das i am anfang als 1.
      Um in der schleife zu wissen, wann das letzte Element gekommen ist, musst du dann dein aktuelles i nur mit der größe des Arrays vergleichen!

      werbeklaus

      1. Hallo werbeklaus.

        Das foreach existiert IMHO als vereinfachung, wenn man ein Array durchlaufen muss.  In JavaScript bspw. muss man stattdessen ein for (var i = 0; i < array.length; i++) schreiben.

        Man muss nicht. Man kann ebenso gut http://de.selfhtml.org/javascript/sprache/schleifen.htm#for@title=for-in verwenden.

        Folgende Schleifen erzeugen eine äquivalente Ausgabe:

        var arr_test = ['Foo', 'Bar', 'Baz', 'Qux'];  
        var str_out = '';  
          
        for (var i = 0; i < arr_test.length; i++) {  
          str_out += 'arr_test[' + i + '] = ' + arr_test[i] + "\n";  
        }  
        alert(str_out);  
          
        str_out = '';  
          
        for (var str_test in arr_test) {  
          str_out += 'arr_test[' + str_test + '] = ' + arr_test[str_test] + "\n";  
        }  
        alert(str_out);
        

        Einen schönen Freitag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        mathbr:del.icio.us/ mathbr:w00t/
      2. Hello,

        Das foreach existiert IMHO als vereinfachung, wenn man ein Array durchlaufen muss.

        Foreach() arbeitet die Kette vom Startanker Element für Element entsprechend dem Folgezeiger ab.
        For()     arbeitet die Kette entsprechend der Treffer in der Keyliste ab
                  Das bedeutet aber auch, dass für jeden Iterationsschritt die Kette wieder neu
                  durchlaufen werden muss, bis ein Treffer gelandet wird.
                  Wird kein Treffer gelandet, gibt es einen Datenzugriffsfehler
                  den muss man abfangen
        each()    arbeitet die Kette vom aktuellen Element ab Element für Element entsprechend dem
                  Folgezeiger ab.

        Die For-Schliefe eignet sich nur für "Arrays" mit ordinalen Keys, die möglichst auch keine Lücken haben dürfen (Ordinalität besagt das eigentlich schon). Wenn Lücken erwartet werden, müsste man die abfangen.

        Foreach ist die ohne Zweifel am besten geeigente Zugriffsmethode für Abfragfeserien in PHP. Man könnte zur Unterstützung auch noch array_slice und array_splice verwenden, um sich den entsprechenden Ausschnitt aus dem Array zu verschaffen.

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

    2. Hallo bjoern,

      Dann draengt eine for-Scheife sich  geradezu auf.

      Gruß,

      Dieter

    3. Guten Abend!

      ich möchte mit foreach($array as $var) ein Array auslesen, aber erst mit dem 2tem eintrag starten, also das erste Arrayelement auslassen. Wie mache ich dies am besten?

      Aus Seite http://de3.php.net/foreach
      "Sobald foreach zum ersten Mal ausgeführt wird, wird der interne Arrayzeiger automatisch auf das erste Element des Arrays gesetzt. Das bedeutet, dass Sie vor einem Durchlauf von foreach reset() nicht aufrufen müssen."

      Also kann man den Pointer vorher NICHT ausrichten. Da musst du wohl mitzählen:

      $lfd = 0;
      $max = count($arr);
      foreach ($arr as $value) {
        // den ersten eintrag nicht
        if ( $lfd > 0 ) {
         echo "Wert:  $value<br />\n";
        }
        $lfd++;
      /*

      Außerdem währe es gut, zu wissen, wann das letzte Element des Arrays aufgerufen wird. Zuerst Einträge zählen und dann mit counter überprüfen? Aber wie?

      */
        if ( $lfd == $max ) {
          echo "letztes Element";
        }
      }

      Kalle

  2. Hallo bjoern,

    Du kannst entweder einen Zaehler nehmen
    $i = 0;
    foreach($foo as $bar)
    {
      if ( $i > 0 )
      {
        lies_aus();
      }
      $i++;
    }

    oder eine for Schleife, die ihren Zaehler gleich mitbringt. Es gibt noch einige andere Moeglichkeiten, die du im PHP-Manual unter Control Structures nachlesen kannst.

    Gruß,

    Dieter

  3. Danke, hat mit der for-Schleife geklappt.

    Gruß Björn