PHP Conference Japan 2024

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 个注释

Jonnycake
10 年前
使用 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);
?>
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(); // 文件的第二行

?>

<?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