Mit foreach Array ab bestimmter Position auslesen
bjoern
- php
Guten Abend!
ich möchte mit foreach($array as $var) ein Array auslesen, aber erst mit dem 2tem eintrag starten, also das erste Arrayelement auslassen. Wie mache ich dies am besten?
Gruß bjoern
Guten Abend!
ich möchte mit foreach($array as $var) ein Array auslesen, aber erst mit dem 2tem eintrag starten, also das erste Arrayelement auslassen. Wie mache ich dies am besten?
Gruß bjoern
Außerdem währe es gut, zu wissen, wann das letzte Element des Arrays aufgerufen wird. Zuerst Einträge zählen und dann mit counter überprüfen? Aber wie?
Gruß Bjoern
Hallo bjoern!
Das foreach existiert IMHO als vereinfachung, wenn man ein Array durchlaufen muss. In JavaScript bspw. muss man stattdessen ein for (var i = 0; i < array.length; i++) schreiben.
So kannst du in PHP doch auch ganz simpel starten: Du definierst das i am anfang als 1.
Um in der schleife zu wissen, wann das letzte Element gekommen ist, musst du dann dein aktuelles i nur mit der größe des Arrays vergleichen!
werbeklaus
Hallo werbeklaus.
Das foreach existiert IMHO als vereinfachung, wenn man ein Array durchlaufen muss. In JavaScript bspw. muss man stattdessen ein for (var i = 0; i < array.length; i++) schreiben.
Man muss nicht. Man kann ebenso gut http://de.selfhtml.org/javascript/sprache/schleifen.htm#for@title=for-in verwenden.
Folgende Schleifen erzeugen eine äquivalente Ausgabe:
var arr_test = ['Foo', 'Bar', 'Baz', 'Qux'];
var str_out = '';
for (var i = 0; i < arr_test.length; i++) {
str_out += 'arr_test[' + i + '] = ' + arr_test[i] + "\n";
}
alert(str_out);
str_out = '';
for (var str_test in arr_test) {
str_out += 'arr_test[' + str_test + '] = ' + arr_test[str_test] + "\n";
}
alert(str_out);
Einen schönen Freitag noch.
Gruß, Ashura
Hello,
Das foreach existiert IMHO als vereinfachung, wenn man ein Array durchlaufen muss.
Foreach() arbeitet die Kette vom Startanker Element für Element entsprechend dem Folgezeiger ab.
For() arbeitet die Kette entsprechend der Treffer in der Keyliste ab
Das bedeutet aber auch, dass für jeden Iterationsschritt die Kette wieder neu
durchlaufen werden muss, bis ein Treffer gelandet wird.
Wird kein Treffer gelandet, gibt es einen Datenzugriffsfehler
den muss man abfangen
each() arbeitet die Kette vom aktuellen Element ab Element für Element entsprechend dem
Folgezeiger ab.
Die For-Schliefe eignet sich nur für "Arrays" mit ordinalen Keys, die möglichst auch keine Lücken haben dürfen (Ordinalität besagt das eigentlich schon). Wenn Lücken erwartet werden, müsste man die abfangen.
Foreach ist die ohne Zweifel am besten geeigente Zugriffsmethode für Abfragfeserien in PHP. Man könnte zur Unterstützung auch noch array_slice und array_splice verwenden, um sich den entsprechenden Ausschnitt aus dem Array zu verschaffen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo bjoern,
Dann draengt eine for-Scheife sich geradezu auf.
Gruß,
Dieter
Guten Abend!
ich möchte mit foreach($array as $var) ein Array auslesen, aber erst mit dem 2tem eintrag starten, also das erste Arrayelement auslassen. Wie mache ich dies am besten?
Aus Seite http://de3.php.net/foreach
"Sobald foreach zum ersten Mal ausgeführt wird, wird der interne Arrayzeiger automatisch auf das erste Element des Arrays gesetzt. Das bedeutet, dass Sie vor einem Durchlauf von foreach reset() nicht aufrufen müssen."
Also kann man den Pointer vorher NICHT ausrichten. Da musst du wohl mitzählen:
$lfd = 0;
$max = count($arr);
foreach ($arr as $value) {
// den ersten eintrag nicht
if ( $lfd > 0 ) {
echo "Wert: $value<br />\n";
}
$lfd++;
/*
Außerdem währe es gut, zu wissen, wann das letzte Element des Arrays aufgerufen wird. Zuerst Einträge zählen und dann mit counter überprüfen? Aber wie?
*/
if ( $lfd == $max ) {
echo "letztes Element";
}
}
Kalle
Hallo bjoern,
Du kannst entweder einen Zaehler nehmen
$i = 0;
foreach($foo as $bar)
{
if ( $i > 0 )
{
lies_aus();
}
$i++;
}
oder eine for Schleife, die ihren Zaehler gleich mitbringt. Es gibt noch einige andere Moeglichkeiten, die du im PHP-Manual unter Control Structures nachlesen kannst.
Gruß,
Dieter
Danke, hat mit der for-Schleife geklappt.
Gruß Björn