Problem mit Schleifen (foreach und while)
OLZU
- php
Hallo liebes Forum,
wahrscheinlich ist es wirklich einfach und ich steh' nur auf'm Schlauch...
Ich habe eine Textdatei (headlines.txt) mit einer unbestimmten Anzahl an Zeilen.
Per PHP möchte ich diese Datei zeilenweise formatiert anzeigen lassen.
Dazu lese ich die Datei in ein Array ein und lese dies per foreach - Schleife wieder aus:
$zeilen = file ("headlines.txt");
foreach ($zeilen as $zeile)
{echo "<p>$zeile</p>";}
So weit, so gut.
Jetzt möchte ich aber nur die ersten fünf Zeilen ausgeben.
Dafür habe ich die foreach - Schleife um eine while - Schleife ergänzt:
$i = 0;
foreach ($zeilen as $zeile)
{
while ($i < 5)
{
echo "<p>$zeile</p>";
$i++;
}
}
Aber anstatt die ersten fünf Zeilen auszugeben, wird die erste Zeile fünfmal angezeigt... :-(
Kann mir bitte jemand sagen, wo mein Fehler liegt.
Ich sitze schon seit einiger Zeit vor dem Bildschirm, komme aber nicht weiter.
Da die Anzahl der Zeilen leicht änderbar sein soll, möchte ich folgende "Krücke" nicht verwenden:
echo "<p>$zeilen[0]";
echo "<p>$zeilen[1]";
...
echo "<p>$zeilen[4]";
Vielen Dank im Voraus für euere Hilfe!
Viele Grüße
OLZU
$zeilen = file ("headlines.txt");
for ($i=0; $i<=5; $i++)
{echo "<p>$zeilen[$i]</p>";}
Hallo Markus,
$zeilen = file ("headlines.txt");
for ($i=0; $i<=5; $i++)
{echo "<p>$zeilen[$i]</p>";}
vielen Dank! So klappt's!!
Da hab' ich wohl zu kompliziert gedacht... ;-)
Schönen Abend noch.
OLZU
Hallo OLZU.
Ich habe eine Textdatei (headlines.txt) mit einer unbestimmten Anzahl an Zeilen.
Per PHP möchte ich diese Datei zeilenweise formatiert anzeigen lassen.
Jetzt möchte ich aber nur die ersten fünf Zeilen ausgeben.
Ich würde eine einfache for-Schleife verwenden:
$arr_zeilen = file('headlines.txt');
for ($int_i = 0; $int_i < 5; $int_i++) {
echo '<p>'.$arr_zeilen[$int_i].'</p>';
}
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo OLZU.
Aber anstatt die ersten fünf Zeilen auszugeben, wird die erste Zeile fünfmal angezeigt... :-(
Erklärung vergessen:
~~~php
$i = 0;
foreach ($zeilen as $zeile)
{
Hier legst du bei jedem Schleifendurchlauf das aktuelle Element in der Variable $zeile ab.
> ~~~php
while ($i < 5)
> {
> echo "<p>$zeile</p>";
> $i++;
Und hier gibst du *genau diese* aktuelle Zeile fünf mal aus.
Wenn überhaupt, dann müsstest du innerhalb des foreach die Variable $i jeweils um eins erhöhen und so bald sie den Wert 5 erreicht, den Schleifendurchlauf abbrechen; damit werden die folgende Zeilen nicht mehr ausgegeben.
Aber wie gesagt bist du mit einer for-Schleife sicher besser bedient.
Einen schönen Sonntag noch.
Gruß, Ashura
Hallo Ashura,
auch dir vielen Dank für deine Bemühungen.
Hab mich für Markus' Lösung entschieden - ist kürzer. :-)
Viele Grüße aus Oberfranken
OLZU
Hallo,
auch dir vielen Dank für deine Bemühungen.
Hab mich für Markus' Lösung entschieden - ist kürzer. :-)
... aber nicht in jedem Fall richtig.
Foreach() ist bei PHP-Arrays die bessere Variante.
LG
Chris
Hi,
Zustimmung, zumal die "i <= 5"-Schleife keinerlei Prüfung auf die tatsächliche Zeilenzahl der Datei vornimmt - was, wenn die nur 4 hat...
MfG
Rouven
Hallo Rouven.
Zustimmung, zumal die "i <= 5"-Schleife keinerlei Prüfung auf die tatsächliche Zeilenzahl der Datei vornimmt - was, wenn die nur 4 hat...
Dann werden folgendermaßen auch nur vier Zeilen ausgegeben:
$arr_zeilen = file('headlines.txt');
for ($int_i = 0; $int_i < (count($arr_zeilen) < 5 ? count($arr_zeilen) : 5); $int_i++) {
echo '<p>'.$arr_zeilen[$int_i].'</p>';
}
Einen schönen Sonntag noch.
Gruß, Ashura
echo $begrüßung;
was, wenn die [Datei] nur 4 [Zeilen] hat...
Dann werden folgendermaßen auch nur vier Zeilen ausgegeben:
for ($int_i = 0; $int_i < (count($arr_zeilen) < 5 ? count($arr_zeilen) : 5); $int_i++) {
Warum denn einfach, wenn es umständlich auch geht? :-)
Was spricht denn dagegen, die Datei zeilenweise einzulesen, bis entweder 5 Zeilen oder das Dateiende erreicht ist? Das komplette Einlesen mittels file() ist zwar bequem aber doch wohl für die Problemlösung überflüssig.
echo "$verabschiedung $name";
gudn tach!
Was spricht denn dagegen, die Datei zeilenweise einzulesen, bis entweder 5 Zeilen oder das Dateiende erreicht ist?
dass das script dann bei einer datei mit genau fuenf zeilen versuchen wuerde eine sechste zeile einzulesen...
$handle=fopen('5zeiler.txt', 'r');
if($handle){
$i=0;
while($i++==5 ^ !feof($handle)) echo $i.': '.fgets($handle, 4096);
fclose($handle);
}
scnr.
jaja, schon gut, ich hab ja deinen beitrag als "hilfreich" bewertet und gehe gleich schlafen. ;-)
prost
seth
Hallo,
Zustimmung, zumal die "i <= 5"-Schleife keinerlei Prüfung auf die tatsächliche Zeilenzahl der Datei vornimmt - was, wenn die nur 4 hat...
Dann werden folgendermaßen auch nur vier Zeilen ausgegeben:
$arr_zeilen = file('headlines.txt');
for ($int_i = 0; $int_i < (count($arr_zeilen) < 5 ? count($arr_zeilen) : 5); $int_i++) {
echo '<p>'.$arr_zeilen[$int_i].'</p>';
}
Und das ist jetzt weniger kompliziert als
$i=0;
foreach($filearray as $zeilen)
{
echo "<p>$zeilen</p>\n";
if (++$i >= 5) break;
}
?
Hier kann das "Array" ruhig bei 10 beginnen und es dürfen Indexe fehlen. Es werden immer maximal fünf Zeilen ausgegeben.
LG
Chris
Hallo Chris.
Und das ist jetzt weniger kompliziert als
$i=0;
foreach($filearray as $zeilen)
{
echo "<p>$zeilen</p>\n";
if (++$i >= 5) break;
}?
Wie ich schon schrieb ist dies eine Alternative, ja.
Einen schönen Sonntag noch.
Gruß, Ashura