Maik Görgens: Kopie vom Array bei foreach

Hallo!

Ich bin noch PHP-Anfänger und habe rumprogrammiert und wollte innerhalb einer foreach-Schleife das Array verändern. Dann kam nicht das bei raus, was ich wollte. Ich hab also ungefähr 4 Stunden rumgesucht und dacht gar nicht daran, das ich foreach falsch benutzt habe. Nach den besagten 4 Stunden bin ich dann doch zufällig an die Info gestoßen, das foreach ne Kopie macht. Also hab ich foreach gegen list und each ersetzt und es funktioniert.

Das hat euch jetzt warscheinlich nicht so brennend interessiert, womit ich meine Zeit verbringe, aber was solls...

Jetzt zu meiner Frage: Wißt ihr, was der Grund ist, das überhaupt eine Kopie angelegt wird? Also was die Entwickler dazu veranlasst hat mich so zu quälen ;)

Vielen Dank und Grüße
Maik

  1. wahrscheinlich Spaß an der Freude ;-)

    ne, ich geh mal davon aus, dass es einfach ne Sicherheitsvorkehrung ist, da die Foreach-Schleifen ja meistens zur Überprüfung von Daten verwendet werden. Maybe wollten Sie die Daten dadurch ja vor Veränderung schützen... wissen tu ichs aber nicht ;-)

  2. hi,

    Jetzt zu meiner Frage: Wißt ihr, was der Grund ist, das überhaupt eine Kopie angelegt wird? Also was die Entwickler dazu veranlasst hat mich so zu quälen ;)

    was veranlasst dich, sämtliche hinweise, die die entwickler zur arbeitsweise ihrer funktionen bereitstellen, zu ignorieren?

    die manual-seite zu foreach sagt doch klar und deutlich:

    "Anmerkung: Beachten Sie auch, dass foreach mit einer Kopie des angegebenen Arrays arbeitet, nicht mit dem Array selbst. [...]"

    Das hat euch jetzt warscheinlich nicht so brennend interessiert, womit ich meine Zeit verbringe, aber was solls...

    etwas mehr nachlesen könnte dir so einiges von der zeit, die du derzeit offenbar mit trial-and-error verplemperst, sparen.

    gruß,
    wahsaga

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

    Ich bin noch PHP-Anfänger und habe rumprogrammiert und wollte innerhalb einer foreach-Schleife das Array verändern. Dann kam nicht das bei raus, was ich wollte. Ich hab also ungefähr 4 Stunden rumgesucht und dacht gar nicht daran, das ich foreach falsch benutzt habe. Nach den besagten 4 Stunden bin ich dann doch zufällig an die Info gestoßen, das foreach ne Kopie macht. Also hab ich foreach gegen list und each ersetzt und es funktioniert.

    Das geht mit foreach() auch, jedoch erst ab Version 5.X (siehe auch http://de.php.net/foreach, insbesondere Kommentare):

      
      
    foreach($array as &$key) {  // Hier wird $key durch das & zu einer Referenz  
        $key['foobar'] = 1234;  
    }  
      
    
    

    Jetzt zu meiner Frage: Wißt ihr, was der Grund ist, das überhaupt eine Kopie angelegt wird? Also was die Entwickler dazu veranlasst hat mich so zu quälen ;)

    Schaue dir dazu am besten den entsprechenden Eintrag im Manual an.

    Grüße,
    Fabian St.

    --
    ---------------------
    fabi@erde ~# whatis spam
    spam: nothing appropriate
    ---------------------
    Selfcode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)
  4. Hi!

    Ich sehe gerade, sowas gab es heute schon: https://forum.selfhtml.org/?t=108680&m=677373

    Grüße,
    Fabian St.

    --
    ---------------------
    fabi@erde ~# whatis spam
    spam: nothing appropriate
    ---------------------
    Selfcode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:( ss:) de:> js:| ch:? mo:) zu:)