for und foreach
Hans
- php
0 Hannes0 jobo3 Sven Rautenberg1 Tom0 Hopsel
Guten (Frei)Tag wünsch ich :-)
Gibt es einen Unterschied zwischen
for ($i = 0; $i < count($typname); $i++) {
echo $typname[$i];
}
und
foreach ($typname as $value) {
echo $value;
}
?
Hansi
Gibt es einen Unterschied zwischen
for ($i = 0; $i < count($typname); $i++) {
echo $typname[$i];
}
>
> und
>
> ~~~php
foreach ($typname as $value) {
> echo $value;
> }
?
http://de.php.net/manual/de/control-structures.foreach.php:
Hinweis: When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.
Hinweis: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it.
Hallo,
Guten (Frei)Tag wünsch ich :-)
Gibt es einen Unterschied zwischen
for ($i = 0; $i < count($typname); $i++) {
echo $typname[$i];
}
>
> und
>
> ~~~php
foreach ($typname as $value) {
> echo $value;
> }
vielleicht, dass man foreach auf alle iterierbaren Objekte anwenden kann, selbst wenn sie nicht auf count() reagieren (zB. SimpleXML-Objekte)?
Ansonsten historisch? Erst kam for, dann foreach?
Gruß
jobo
Moin!
Gibt es einen Unterschied zwischen
for ($i = 0; $i < count($typname); $i++) {
echo $typname[$i];
}
>
> und
>
> ~~~php
foreach ($typname as $value) {
> echo $value;
> }
?
Ja.
foreach bearbeitet alle Elemente des Arrays, in $value erhälst du eine Kopie des Arraywertes.
Die for-Schleife bearbeitet alle Arrayelemente mit Index von 0 bis count($typname)-1, unabhängig davon, ob diese Elemente tatsächlich existieren.
Nimm mal folgendes Szenario:
<?php
error_reporting(E_ALL | E_STRICT);
$typname = array(0=>'Index Null', 3=>'Index drei');
echo "For\n";
for ($i = 0; $i < count($typname); $i++) {
echo $typname[$i]."\n";
}
echo "Foreach\n";
foreach ($typname as $value) {
echo $value."\n";
}
Ergebnis:
For
Index Null
Notice: Undefined offset: 1 in /root/test.php on line 9
Foreach
Index Null
Index drei
- Sven Rautenberg
Hello,
Gibt es einen Unterschied zwischen
for ($i = 0; $i < count($typname); $i++) {
echo $typname[$i];
}
>
> und
>
> ~~~php
foreach ($typname as $value) {
> echo $value;
> }
?
Klar gibt es den, insbesondere bei assoziativen Arrays.
Leider machst Du keine Aussage zum Aufbau deines (vermuteten) Arrays $typname.
Wenn $typname ein indiziertes Array sit, also eins, dessen Index lückenlos numerisch von 0 .. x läuft, dann kannst Du dieses Array mit der for()-Schleife durchlaufen. Hat der Index aber eine Lücke, gibt es Schwierigkeiten mit den Lücken und der obereb Grenze, die Du mit count() ermittelst. Dia Anzahl der Elemente hat dann ja nichts mehr mit den Indexgrenzen zu tun.
foreach() arbeitet anders. Du kannst Dir das Array in PHP als verkettete Liste vorstellen, bei verzeweigten Arrays dann eben als Baumstruktur. Foreach() arbeitet nun immer den übergebenen Ast ab, hangelt sich also von einem Element in der Kette zu seinem Nachfolger. Das muss dann keinesfalls der Nachfolger im Index sein, denn der Index bleibt bei foreach() für die Reihenfolge der Abarbeitung ganz außen vor.
Wenn Du den Index in der foreach()-Schleife benötigst, ermöglicht Dir das Sprachkonstrukt dies durch
foreach($_arr as $index => $value)
{
echo "$index: $value\r\n";
}
Die Bezeichner $index und $value sind hier vollkommen frei wählbar und werden im Sprachkonstrukt durch ihre Position an ihre Funktionen gebunden. Du kannst also auch $hans und $gretel dafür verwenden, Hauptsache, Du weißt nachher noch, welcher Name was versinnbildlichen sollte.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hi Hans!
Als Ergänzung zu den anderen hilfreichen Antworten:
Mit foreach
hast du die Möglichkeit, auch die Schlüssel des Arrays auszulesen:
foreach($array as $key => $value)
{
echo 'Schlüssel: "'.$key.'", Wert: "'.$value.'"'."\n";
}
MfG H☼psel