Frage

In PHP SPLFileObject können Dateien als Iteratoren zu behandeln.

Und doch gibt es ein Verhalten, das ich nicht verstehe. Wenn Sie das nächste Anruf () auf dem Objekt erhöht er den Wert der Taste (), aber die Zeile in der Datei nicht voranbringen, wenn Sie mit jeder Iteration Strom () aufrufen. Die SPL-Dokumente fest, dass Taste () aktuelle Zeilennummer zurück.

-Code zu reproduzieren:

test.txt

0
1
2
3

iterator.php

<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->next();
$fi->next();
echo $fi->current() . "\n"; // prints 1, expecting 3
echo $fi->key() . "\n"; //prints 3

Von dem, was ich sehen kann, wird die nächste Arbeit nicht auf diesem Abschnitt. Es wird vorrücken, wenn ich es auf diese Weise verwendet werden:

iterator_fix.php

<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->current();
$fi->next();
$fi->current();
$fi->next();
echo $fi->current() . "\n"; // prints 3 as expected
echo $fi->key() . "\n"; //prints 3

Kann mir jemand erklären, ob dies ein Fehler ist oder wenn es beabsichtigt ist, Verhalten?

Sah über Google und PHP-Foren und nichts kam. Vielen Dank im Voraus.

War es hilfreich?

Lösung

SPLFileObject :: next () hat nur dann eine Wirkung, wenn die READ_AHEAD Flag gesetzt wurde.

$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);

Andere Tipps

Nun, auf jeden Fall, warum Sie mit foreach verwenden Sie es nicht, wie es ist, was es gedacht?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top