Взгляните на SplFileObject
, который поддерживает построчное чтение файла с простым foreach
:
$file = new SplFileObject($path);
foreach ($file as $line)
{
...
}
Поскольку он предлагает итерацию по всем строкам, вы также можете отфильтровать его напрямую, например, получить все строки, начинающиеся с a
и удаляя разрывы строк:
$file = new SplFileObject($path);
$file->setFlags(SplFileObject::DROP_NEW_LINE);
Теперь, вы хотите отфильтровать строки, вы можете просто добавить фильтр:
$linesStartingWithA = new RegexIterator($file, '/^a/');
Если вы теперь используете foreach
для новой переменной, вы получите все строки, начинающиеся с a
:
foreach ($linesStartingWithA as $line)
{
...
}
Простой пример с объектом SplTempFileObject
для демонстрации этого (здесь временный файл, потому что тогда ему не нужен физический файл на диске, это особый тип SplFileObject
). 1024 *
Пример ( Демо ):
// for the example, a SplFileObject of SplTempFileObject is used.
$file = new SplTempFileObject();
$file->setFlags(SplFileObject::DROP_NEW_LINE);
$file->fwrite('a
aah
aahed
aahing
aahs
b
baa
baaed
baaing
baal
baalism
baalisms
baals
baas
baba
babas
babbitting
babble
babbled
babbler');
$linesStartingWithA = new RegexIterator($file, '/^a/');
foreach ($linesStartingWithA as $line => $string)
{
printf("#%d: %s\n", $line, $string);
}
Выход:
#0: a
#1: aah
#2: aahed
#3: aahing
#4: aahs