簡體   English   中英

PHP 在使用延遲加載時讀取文本文件中的下一行?

[英]PHP reading next line in text file while using lazy loading?

我有一個要逐行閱讀的文本文件。 對於每一行,我還需要下一行的值,因此我需要在當前行中讀取下一行的內容。

我在這里閱讀了許多答案,我可以用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>';
      }
    }
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM