PHP читается каждые 10 из 100 строк

Я пытаюсь прочитать текстовый файл из 5000 строк. Однако я хочу только получить первые 10 строк из каждых 100 строк. Итак, строка 1-10, строка 101 – 110, строка 200 – 210 и т. Д. Я просто не могу понять, какую логику использовать.

$count = count(file($text)) for ($i = 0; $i < $count; $i++) { $test = fgets($f_text) } 

Solutions Collecting From Web of "PHP читается каждые 10 из 100 строк"

Используйте % 100 и только печатайте строки, где $n % 100 > 0 && $n % 100 <= 10 .

 $lines = file($text); foreach ($lines as $n => $line) { if ($n % 100 > 0 && $n % 100 <= 10) { echo $line; // or whatever } } 

Пример того, как работает логика:

 foreach (range(0,250) as $n => $line) { if ($n % 100 >= 1 && $n % 100 <= 10 ) { echo $i . "\n"; } } 1 2 3 4 5 6 7 8 9 10 101 102 103 104 105 106 107 108 109 110 201 202 203 204 205 206 207 208 209 210 

Вы можете легко сделать это с помощью SPLFileObject , если знаете, сколько строк находится в файле:

 $file = new SplFileObject( $filename, "r"); $lines = 0; while ( !$file->eof()) { $file->fgets(); $lines++; } 

Теперь вы знаете, что в файле есть $lines строк. Если это статично, скажем 5000, просто инициализируйте $lines до 5000. Если это не так, давайте округлим это до ближайшего 100:

 $lines -= ($lines % 100); 

Теперь мы просто перебираем каждую сотню, стремимся к группировке 10 и получаем нужные нам данные:

 $data = array(); for( $i = 0; $i < $lines; $i += 100) { $file->seek( $i); for( $j = 0; $j < 10; $j++) { $data[] = $file->fgets(); } } 

С помощью этого решения вы никогда не загружаете весь файл в память, что позволит сэкономить ресурсы при работе с большими файлами. Кроме того, если вы заранее знаете размер файла, вы будете читать только строки данных, которые вам нужны.

Основываясь на обоих других ответах, возможно, наиболее эффективный для памяти способ сделать это:

 foreach(new SplFileObject($filename) as $n => $line) if($n % 100 < 10) echo $line;