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(); // 檔案的第四行

?>

老實說,我不知道這是否會浪費記憶體和/或 CPU。
To Top