Quick note when using next(), it appears that you have to already be at the end of the line in order for it to hop to the next one. I realized this while attempting to do a lineCount implementaiton like the following:
<?php
function lineCount($file)
{
$x=0;
while(!$file->eof()) {
$x++;
$file->next();
}
return $x;
}
$file=new SplFileObject("something");
echo lineCount($file);
?>
It ended up in an infinite loop. The solution was to just call fgets()/current() in the loop, although it wasn't being used anywhere so the following works:
<?php
function lineCount($file)
{
$x=0;
while(!$file->eof()) {
$file->current();
$x++;
$file->next();
}
return $x;
}
$file=new SplFileObject("something");
echo lineCount($file);
?>SplFileObject::next
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
SplFileObject::next — Read next line
Parameters
This function has no parameters.
Return Values
No value is returned.
Examples
Example #1 SplFileObject::next() example
<?php
// Read through file line by line
$file = new SplFileObject("misc.txt");
while (!$file->eof()) {
echo $file->current();
$file->next();
}
?>See Also
- SplFileObject::current() - Retrieve current line of file
- SplFileObject::key() - Get line number
- SplFileObject::seek() - Seek to specified line
- SplFileObject::rewind() - Rewind the file to the first line
- SplFileObject::valid() - Not at EOF
+add a note
User Contributed Notes 2 notes
Jonnycake ¶
11 years ago
quijote dot shin at gmail dot com ¶
9 years ago
As @Jonnycake pointed there is no documentation about the following behavior of next();
You need to call current() to really move forward without the need of a source loop.
Be:
<?php
$file = new SplFileObject("file.txt");
echo PHP_EOL . $file->current();
$file->next();
$file->next();
$file->next();
echo PHP_EOL . $file->current(); // 2nd line of the file
?>
<?php
$file = new SplFileObject("file.txt");
echo PHP_EOL . $file->current();
$file->next(); $file->current();
$file->next(); $file->current();
$file->next();
echo PHP_EOL . $file->current(); // be the 4th line of the file
?>
Honestly, I don't know if it is waste of memory and/or CPU .