• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • SplFileObject::next()

    (PHP 5 >= 5.1.0, PHP 7)

    Read next line

    说明

    publicSplFileObject::next(void): void

    Moves ahead to the next line in the file.

    参数

    此函数没有参数。

    返回值

    没有返回值。

    范例

    SplFileObject::next() example

    <?php
    // Read through file line by line
    $file = new SplFileObject("misc.txt");
    while (!$file->eof()) {
        echo $file->current();
        $file->next();
    }
    ?>
    

    参见

    • SplFileObject::current() Retrieve current line of file
    • SplFileObject::key() Get line number
    • SplFileObject::seek() Seek to specified line
    • SplFileObject::rewind() Rewind the file to the first line
    • SplFileObject::valid() Not at EOF
    Quick note when using next(), it appears that you have to already be at the end of the line in order for it to hop to the next one. I realized this while attempting to do a lineCount implementaiton like the following:
    <?php
     function lineCount($file)
     {
       $x=0;
       while(!$file->eof()) {
         $x++;
         $file->next();
       }
       return $x;
     }
     $file=new SplFileObject("something");
     echo lineCount($file);
    ?>
    It ended up in an infinite loop. The solution was to just call fgets()/current() in the loop, although it wasn't being used anywhere so the following works:
    <?php
     function lineCount($file)
     {
       $x=0;
       while(!$file->eof()) {
         $file->current();
         $x++;
         $file->next();
       }
       return $x;
     }
     $file=new SplFileObject("something");
     echo lineCount($file);
    ?>
    
    As @Jonnycake pointed there is no documentation about the following behavior of next();
    You need to call current() to really move forward without the need of a source loop.
    Be:
    <?php
    $file = new SplFileObject("file.txt");
    echo PHP_EOL . $file->current();
    $file->next();
     $file->next();
     $file->next();
    echo PHP_EOL . $file->current(); // 2nd line of the file
    ?>
    <?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(); // be the 4th line of the file
    ?>
    Honestly, I don't know if it is waste of memory and/or CPU .