Ich weiß gar nicht so genau, warum mir das erst jetzt aufgefallen ist … wahrscheinlich liegt es daran, dass ich foreach-Schleifen in PHP bisher immer nur zum Auslesen verwendet habe.
Die foreach-Schleife in PHP
1 2 3 | foreach ($myArray as $key => $value) { // code here } |
referenziert $value nicht, sondern kopiert die Werte. Das bedeutet, dass folgender Code keinen Effekt hat:
1 2 3 | foreach ($myArray as $key => $value) { $value += "something"; } |
Nach dem Schleifendurchlauf sind die Werte des Arrays genau wie vorher.
Seit PHP 5 kann man dieses “Problem” folgendermaßen lösen:
1 2 3 | foreach ($myArray as $key => &$value) { $value += “something”; } |
Wie in der Doku (php.net) von PHP beschrieben, wird jetzt der Wert durch das &-Zeichen referenziert und nicht mehr kopiert.
Es wird noch darauf hingewiesen, dass man nach dem Schleifendurchlauf mit
1 | unset($value); |
die Referenz auflösen sollte, da diese auch nach der Schleife auf das letzte Element des Arrays zeigt.
