Как получить количество строк с SplFileObject?

$file = new SplFileObject('/path/to/file.txt'); 

Как найти количество строк в файле с помощью SplFileObject ?

Почему бы просто не использовать обработчики файлов и не делать этого в этом вопросе ? Его простой, быстрый и очень эффективный.

Если вы абсолютно должны использовать spl, вы можете сделать это так

 $file = new SplFileObject("/path/to/file.txt"); $i = 0; while (!$file->eof()) { $i++; $file->next(); } print "file has " . $i . " lines"; 

iterator_count и поэтапное повторение с использованием next() разбивается на мою версию php 5.3.7 под Ubuntu.

Также кажется fseek([any offset], SEEK_END) метод fseek([any offset], SEEK_END) . key() возвращает 0.

Итерация по большим файлам с помощью seek($lineCount) выполняется слишком медленно.

Простейший 5.3.7-проверенный способ

 // force to seek to last line, won't raise error $file->seek($file->getSize()); $linesTotal = $file->key(); 

Подсчет 30000 строк требует 0,00002 сек и стоит около 20 кбайт памяти.

Метод итераций занимает около 3 секунд.

Я согласен с Николаем Коневом в использовании seek function намного быстрее, чем прохождение всего файла по строкам , но, поскольку Twisted1919 сказал, что использование размера файла для поиска последней строки запутанно, поэтому мое предложение использует PHP_INT_MAX вместо размера файла:

 // force to seek to last line, won't raise error $file->seek(PHP_INT_MAX); $linesTotal = $file->key(); 

SplFileObject предлагает итератор, по одной итерации в строке:

 $numberOfLines = iterator_count($file); 

Функция iterator_count – ваш друг здесь, совершая обход для вас и возвращающий количество итераций.

Вы можете использовать флаг SKIP_EMPTY файла файла, чтобы не считать пустые строки в этом файле.