Chris: foreach(): Original und Kopie des Arrays

Beitrag lesen

Hallo Bruno,

foreach($zeiten as $key => $value)
   {
     $zeiten[$key] = $zeiten[$key] * 2; // woher weiss php jetzt welches das orginal ist , weil mit der kopie gearbeitet wird?
   }

Das Array, das als Attribut in der foreach( * )-Klammer steht, ist immer eine Kopie. $key und $value sind ebenfalls nur Kopien. Wenn Du die also änderst, hat das keine Relevanz für das Original-Array.

Wenn aber innerhalb der Foreach()-Schleife auf Variablen zugegriffen wird, also zwischen   {   und   } , dann sind das immer die Originale des jeweiligen Scopes, in dem foreach() steht.

foreach($zeiten as $key => $value)  # [1]
   {
     $zeiten[$key] = $value * 2;       # [2]// wieso benutzt du den key, den kann ich doch auch ändern oder ?
   }

Den Key kannst Du nicht ändern. Du kannst lediglich ein Element mit dem Key löschen und ein neues mit einem anderen anlegen. Dann würde es am Ende des "Arrays" angehängt werden, egal welchen key es bekommt. Voraussetzung ist, dass der neue Key noch nicht vorhanden war, sonst würde das Element mit dem vorhandenen Key an seiner derzeitigen Position überschrieben werden.

Du solltest Dir Arrays in PHP immer als verkettete Baumstruktur unterscheidlichster Elemente vorstellen und nicht als geschlossene Speicherstruktur gleichartiger Elemente.

LG
Chris