PHP Foreach

...komplette Frage anzeigen

5 Antworten

Du hast einen Fehler in deinem Code. Korrekt wäre:

$options = array("Erster Eintrag", "Zweiter Eintrag", "Dritter Eintrag", "Vierter Eintrag"); 
foreach($options as $option)
{
    echo $option; 
}   

Zur Logik: Du hast (Plural) diverse Optionen. In die foreach Schleife packst du diese Optionen. Intern arbeitest Du aber nur jeweils mit einer einzelnen Option (Singular!). So sollte man die foreach-Variablen auch benennen. Theoretisch kannst du statt "$option" auch noch "$key => $option" schreiben, wenn Du z.b. assoziative Arrays hast oder grundsätzlich den Array-Schlüssel mit bearbeiten willst.

Ein Array in PHP ist kein Array wie man es in anderen Programmiersprachen kennt. Als richtiger Datentyp kannst du ein PHP-Array als eine ordered map ansehen.

foreach loopt nun intern durch die map hindurch und geht dabei zum nächsten index weiter, weshalb das ursprüngliche Array nicht mehr gebraucht wird um zur nächsten Stelle zu springen. Es wird also nicht

 $optionns = $options[$key];

sondern

*$options++;

ausgeführt (der Stern steht für den Pointer, welcher auf den value von $options zeigt).

Ich hoffe, das hilft dir weiter :)

MfG Ophidian

foreach arbeitet intern mit einer temporären Kopie. Was innerhalb der Schleife mit der Variablen geschieht, aus der foreach sein array bezogen hatte, hat auf den Schleifendurchlauf keinen Einfluß.

Du kannst die Ursprungsvariable innerhalb der Schleife also überschreiben, Du kannst Elemente löschen, die Variable ganz wegschmeißen... Es ist alles ohne Auswirkung auf die Schleifen-Abhandlung...

http://harryboeck.dyndns.org/Experimente/GuteFrageNet/PHP-foreach-temporäre-Kopie.php

Haben wir das auch in der Referenzdokumentation erläutert? Nein, sieht nicht danach aus:

http://de.php.net/manual/en/control-structures.foreach.php

Gut... Da es nicht explizit in der Referenzdokumentation steht, wird es aber auch kein garantiertes Verhalten sein.

Dankeschön :-) Muss man erstmal drauf kommen

0

Wieso, stimmt doch alles?

Er geht das Array durch, und da das zweite auch ein Array ist (in dem Fall eben das selbe) fügt er seine Info aus $options[x] in $options[x] ein.

PHP Verzeiht bei so etwas mehr als andere Sprachen.

Das könnte höchstens eine Warnung geben wenn du diese aktivierst.

Na ja, mich irritiert, dass man zweimal die selbe Variable brauchen kann. Müsste die iteration nicht das Array überschreiben?

0
@LeaLilana

Tut sie ja auch, aber eben jedes Feld mit dem selben Inhalt.

0

Mit welcher Medlung hast du denn gerechnet?

Was möchtest Du wissen?