Yadgar: Arrayelemente in Schleife ausgeben?

High!

Beim Durchgehen der Beispiele zu Array-Funktionen in SCHMIDT, LEISS: PHP - Das Einsteigerseminar wundere ich mich schon seit einiger Zeit, dass zur Ausgabe der Array-Elemente nie eine Schleife verwendet wird, sondern immer nur so unbeholfene Konstruktionen wie

echo arr[0]."<br>".arr[1]."<br>".arr[2]. ... etc. ad nauseam

Kurzerhand habe es dann mal selbst mit einer Schleife versucht:

for ($i=0; $i<10; $i++)
{
  echo arr[i]."<br>";
}

und erfahre dann in den Fehlermeldungen, dass der Index eines Arrays IMMER eine Konstante sein muss, nicht nur bei der Definition, sondern auch bei allen weiteren Zugriffen! Kann das sein? Sollte es nicht auch noch eine andere, flexiblere Art und Weise geben, auf die Indizes von Arrays zuzugreifen?

Bis bald im Khyberspace!

Yadgar

  1. Errandum: es muss natürlich $arr heißen!

    1. hallo

      Errandum: es muss natürlich $arr heißen!

      und $i ansonsten versucht er die _Konstante_ i als Index zu verwenden, die du garantiert nirgendwo definiert hast ;-)

      Außerdem gilt natürlich auch das, was wahsaga gesagt hat. Man muss darauf achten, dass sich der Index innerhalb der definierten Grenzen bewegt. Falls du nur "normale"(numerische) Arrays verwendest und keine "Schweinereien" wie assoziative Arrays, kannst du beispielsweise count() verwenden

        
      for ($i=0; $i<count($arr); $i++)  
      {  
        echo $arr[$i]."<br>";  
      }  
      
      

      evtl. ist es auch so von der Performance her noch besser, da nicht bei jedem Schleifendurchlauf das count() ausgewertet werden muss

        
      $anz=count($arr);  
      for ($i=0; $i<$anz; $i++)  
      {  
        echo $arr[$i]."<br>";  
      }  
      
      

      Liebe Grüße mbr

      1. nochmal Hallo,

        Errandum: es muss natürlich $arr heißen!

        und $i ansonsten versucht er die _Konstante_ i als Index zu verwenden, die du garantiert nirgendwo definiert hast ;-)

        Upps: hatte mich vertan: er versucht erst die Konstante i als Index zu nehmen, merkt dann aber, dass diese nicht definiert ist und probiert dann eben 'i' als Index (also quasi als assoziativer array), was aber (genausowenig wie i) funktioniert. Tja, die Freuden von PHP.
        Die anderen Anmerkungen bleiben natürlich gültig.

        Und bevor du dich jetzt zusehr grämst: Du glaubst nicht: wie oft ich schon dieses sch+#?@ Dollarzeichen vergessen habe...

        Liebe Grüße mbr

      2. High!

        und $i ansonsten versucht er die _Konstante_ i als Index zu verwenden, die du garantiert nirgendwo definiert hast ;-)

        *anKopfklatsch*
        Natürlich! Da sieht man mal wieder, was jahrelanger C++-Trott anrichten kann... und manchmal klopfen die guten alten C64-Zeiten auch noch im Großhirn an, dann wundert man sich, wieso text$ nicht funktioniert, ist doch ein String... nein, ich verbringe viel zu wenig Zeit pro Tag mit der Programmiererei, das muss sich ändern! Auch wenn ich dann mit 40 140 kg wiege und mit 42 meinen ersten Herzinfarkt erleide, that's business!

        Danke für den Hinweis!

        Bis bald im Khyberspace!

        Yadgar

  2. hi,

    for ($i=0; $i<10; $i++)
    {
      echo arr[i]."<br>";
    }

    und erfahre dann in den Fehlermeldungen, dass der Index eines Arrays IMMER eine Konstante sein muss, nicht nur bei der Definition, sondern auch bei allen weiteren Zugriffen! Kann das sein?

    Nein, das kann nicht sein.
    Er muss weder beim Zuweisen noch beim Auslesen konstant sein.
    Er kann zu jedem beliebigen Zeitpunkt ein Ausdruck sein.

    Wie lautet die genaue Fehlermeldung?
    Wie wurde das Array erzeugt, bzw. was enthält es (var_dump)?

    Vermutlich bist du einfach nur zu weit gelaufen mit deiner Schleife, und greifst auf nicht mehr existierende Einträge zu ...? (Meldung á la "undefined offset ...")

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. High!

      Nein, das kann nicht sein.
      Er muss weder beim Zuweisen noch beim Auslesen konstant sein.
      Er kann zu jedem beliebigen Zeitpunkt ein Ausdruck sein.

      Wie lautet die genaue Fehlermeldung?

      Notice: Use of undefined constant i - assumed 'i' in D:\xampplite\htdocs\test\Schmidt_Leiss_090.php on line 10
      Array

      Wie wurde das Array erzeugt, bzw. was enthält es (var_dump)?

      Das Array sieht so aus:

      $videos = array("Woodstock", "Der Wüstenplanet", "Blade Runner", "Abyss", "Reise nach Kandahar");

      Und laut var_dump scheint auch alles zu stimmen:

      array(5) { [0]=>  string(9) "Woodstock" [1]=>  string(16) "Der Wüstenplanet" [2]=>  string(12) "Blade Runner" [3]=>  string(5) "Abyss" [4]=>  string(19) "Reise nach Kandahar" }

      Vermutlich bist du einfach nur zu weit gelaufen mit deiner Schleife, und greifst auf nicht mehr existierende Einträge zu ...? (Meldung á la "undefined offset ...")

      Kann auch nicht sein, die Schleife läuft nur bis einschließlich 4:

      for ($i=0; $i<5; $i++)
        {
          echo $videos[i]."<br>";
        }

      Bis bald im Khyberspace!

      Yadgar

      1. for ($i=0; $i<5; $i++)
          {
            echo $videos[i]."<br>";
          }

        Die Konstante i ist was anderes als die Variable $i.

  3. Nachdem ja alles geklärt ist kannst du dich nun mit dem Wunder des "foreach" beschäftigen ^^

    sind C++ Variablen casesensitive?

    1. Hallo KraKi(noAuth).

      Nachdem ja alles geklärt ist kannst du dich nun mit dem Wunder des "foreach" beschäftigen ^^

      sind C++ Variablen casesensitive?

      Irgendwie passt deine Frage nicht in diesen Thread hier, aber ja, sind sie.

      Einen schönen Dienstag noch.

      Gruß, Mathias

      --
      ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
      debian/rules