Ankündigung

Einklappen
Keine Ankündigung bisher.

array auslesen mit while

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array auslesen mit while

    moin moin,

    also ich möchte mir den inhalt eines arrays mit while in einer variable speichern. funktioniert aber nicht so wie es soll. denn wenn ich mir die var ausgeben lassen kommt immer nur der erste wert des arrays:

    hier der script
    PHP-Code:
    <?
            $anzahl=count($wert);                 //11
            $a="1";
                    
            $wert_array=$wert[0];
                    
            while($a < $wert[$a]) {
            $wert_array.=$wert[$a];
            }
            print($wert_array);
    ?>
    wo liegt denn der fehler?


  • #2
    Warum nicht einfacher mit foreach() ?

    Kommentar


    • #3
      while-Schleifen verwendet man eigentlich eher dann, wenn man nicht weiß wie lang die Ausgabe ist, z.B. beim Auslesen von Verzeichnissen o.ä.
      Bei Arrays kennst du aber die Länge (count()) und kannst daher eine for- oder foreach-Schleife verwenden.
      Näheres zu den Funktionen im Manual.

      Kommentar


      • #4
        mhhhh, also ich muss gestehen ich habe bis jetzt noch nie was mit foreach gemacht und habe das aus dem Manual nicht wirklich verstanden. Kann mir jmd dazu ein einfaches beispiel zeigen?

        schonmal danke

        Kommentar


        • #5
          achsooooo, jetzt hab ichs. hab mir etwas auf`m schlauch gestanden. danke für die hilfe

          Kommentar


          • #6
            Zitat von Zergling
            Bei Arrays kennst du aber die Länge (count()) und kannst daher eine for- oder foreach-Schleife verwenden.
            foreach interessiert sich für die Größe des Arrays auch nicht. Ist also while gleichzusetzen.

            Kommentar


            • #7
              Stimmt.

              Kommentar


              • #8
                Bei foreach kann es allerdings bei sehr großen Arrays zu Problemen mit dem verfügbaren Speicher kommen, da bei jedem Schleifendurchlauf eine Kopie des entsprechenden Arrayauschnittes erzeugt wird. Ab PHP 5 kann man in foreach auch Referenzen verwenden.

                Kommentar


                • #9
                  Zitat von xabbuh
                  Ab PHP 5 kann man in foreach auch Referenzen verwenden.
                  Soviel ich weiß, arbeitet PHP5 intern mit Referenzen. Wenn du keine willst, musst du ein Objekt/Skalar klonen.

                  Kommentar


                  • #10
                    Zitat von Saraneus
                    Soviel ich weiß, arbeitet PHP5 intern mit Referenzen. Wenn du keine willst, musst du ein Objekt/Skalar klonen.
                    Diese beiden Absätze aus der Dokumentation interpretiere ich da aber anders:
                    Note: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. Therefore, the array pointer is not modified as with the each() construct, and changes to the array element returned are not reflected in the original array. However, the internal pointer of the original array is advanced with the processing of the array. Assuming the foreach loop runs to completion, the array's internal pointer will be at the end of the array.

                    As of PHP 5, you can easily modify array's elements by preceding $value with &. This will assign reference instead of copying the value.
                    http://de2.php.net/manual/en/control...es.foreach.php

                    Das Referenzieren bezieht sich wohl nur darauf, wenn du den Zuweisungsoperator bei Objekten verwendest.

                    Kommentar


                    • #11
                      Zitat von xabbuh
                      Note: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself.
                      = "Wenn das Array nicht referenziert ist, arbeitet foreach mit einer Kopie des Arrays".

                      Das bringt uns nicht weiter, denn wie gesagt werden Objekte in PHP intern referenziert, was bedeutet, dass Variablen immer eine Referenz sind, so auch das Array.

                      Kommentar


                      • #12
                        Zitat von Saraneus
                        = "Wenn das Array nicht referenziert ist, arbeitet foreach mit einer Kopie des Arrays".
                        Deswegen kann es zu den von mir angesprochenen Speicherproblemen kommen.

                        Zitat von Saraneus
                        Das bringt uns nicht weiter, denn wie gesagt werden Objekte in PHP intern referenziert, was bedeutet, dass Variablen immer eine Referenz sind, so auch das Array.
                        Den Zusammenhang verstehe ich nicht bzw. was du damit sagen willst.

                        Kommentar


                        • #13
                          @xabbuh:

                          Nehmen wir an, alles in PHP5 sind Referenzen. Dann arbeitet foreach NICHT mit einer Kopie => keine zusätzliche Speicherauslastung.

                          Kommentar


                          • #14
                            Zitat von Saraneus
                            Dann arbeitet foreach NICHT mit einer Kopie => keine zusätzliche Speicherauslastung.
                            Da dem aber nicht so ist, muss man es explizit als Referenz angeben.

                            Kommentar


                            • #15
                              Zitat von xabbuh
                              Zitat von Saraneus
                              Dann arbeitet foreach NICHT mit einer Kopie => keine zusätzliche Speicherauslastung.
                              Da dem aber nicht so ist, muss man es explizit als Referenz angeben.
                              Was "dem nicht so ist"? In PHP5 sind alle Objekte Referenzen. Wenn du ein Objekt einer Methode übergibst, diese Eigenschaften des Objekts ändert, spürst du das Resultat auch außerhalb der Methode.

                              Kommentar

                              Lädt...
                              X