PHP 在使用延迟加载时读取文本文件中的下一行?



我有一个文本文件,我想逐行读取。对于每一行,我还需要下一行的值,因此我需要一些东西来读取下一行,而当前行。

我在这里阅读了许多答案,我可以通过foreach循环来做到这一点,但它需要提前阅读整个文件。我正在寻找仅根据需要阅读的内容。

以下是我到目前为止使用SplFileObject获得的内容。

$file = new SplFileObject($textFile);
$lastNumber = 500;
while (!$file->eof()) {
$currentLine = $file->fgets();
$currentNumber = intval($currentLine);
$file->next();
if ($file->eof()) {
$nextNumber = intval($lastNumber);
} else {
$nextNumber = intval($file->fgets()) - 1;
}
echo $currentNumber . ', ' . $nextNumber . '<br>';
}

假设我有一个文本,其中包含这样的行

0
100
200
300
400

我希望他们像这样打印出来

0, 99
100, 199
200, 299
300, 399
400, 500

但是我的代码每隔一行跳过一次

0, 99
200, 299
400, 500

我的猜测是我的 while 循环和$file->next()每个循环都会将行移动 1 条线,这就是跳过的原因。但是如果没有next()调用,我不知道如何获取下一行的值。我该如何解决这个问题?

使用此 PHP 代码解决方案。

$textFile = 'text.txt';
$file = new SplFileObject($textFile);
$lastNumber = 500;
foreach ($file as $lineNumber => $line) {
$currentNumber = intval($file->current());
if ($lineNumber === 0) {
$previousNumber = $currentNumber;
continue;
} else {
$nextNumber = $currentNumber - 1;
echo $previousNumber . ', ' . $nextNumber . '<br>';
$previousNumber = $currentNumber;
if ($file->eof()) {
$nextNumber = intval($lastNumber);
echo $currentNumber . ', ' . $nextNumber . '<br>';
}
}
}

最新更新