SplFileObject::next

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

SplFileObject::next读取下一行

描述

public SplFileObject::next(): void

前进到文件中的下一行。

参数

此函数没有参数。

返回值

不返回值。

示例

示例 #1 SplFileObject::next() 示例

<?php
// 逐行读取文件
$file = new SplFileObject("misc.txt");
while (!
$file->eof()) {
echo
$file->current();
$file->next();
}
?>

参见

添加备注

用户贡献笔记 2 笔记

7
Jonnycake
9 年前
使用 next() 时快速注意,它似乎需要您已处于行的末尾才能跳到下一行。我在尝试执行以下类似于 lineCount 的实现时发现了这一点

<?php
function lineCount($file)
{
$x=0;
while(!
$file->eof()) {
$x++;
$file->next();
}
return
$x;
}
$file=new SplFileObject("something");
echo
lineCount($file);
?>

它最终陷入无限循环。解决方法是在循环中调用 fgets()/current(),尽管它没有在任何地方使用,所以以下方法有效

<?php
function lineCount($file)
{
$x=0;
while(!
$file->eof()) {
$file->current();
$x++;
$file->next();
}
return
$x;
}
$file=new SplFileObject("something");
echo
lineCount($file);
?>
-3
quijote dot shin at gmail dot com
7 年前
正如 @Jonnycake 所指出的,关于 next() 的以下行为没有文档:

您需要调用 current() 才能真正向前移动,而无需源循环。

成为
<?php
$file
= new SplFileObject("file.txt");

echo
PHP_EOL . $file->current();
$file->next();
$file->next();
$file->next();
echo
PHP_EOL . $file->current(); // 文件的第 2 行

?>

<?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(); // 成为文件的第 4 行

?>

说实话,我不知道这是否是内存和/或 CPU 浪费。
To Top