PHP foreach () возвращает только последние 50 элементов

В настоящее время я использую следующий PHP-код для возврата и форматирования вывода из файла .htm:

<?php $es = "</span>"; $lines = file("http://www.example.com/log.htm", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); foreach($lines as $line){ list($date, $nick, $message) = explode(" ", $line, 3); $str = substr($nick, 4, 1); if($str=="+"){ $nickspan = '<span style="color:teal">'; $nick = substr_replace($nick, "", 2, 2); echo("$date $nickspan$nick$es $message <br/> "); } else { if($str=="@"){ $nickspan = '<span style="color:#F20707">'; $nick = substr_replace($nick, "", 2, 2); echo("$date $nickspan$nick$es $message <br/> "); } else { $str = substr($nick, 3, 1); if($str=="*"){ $nickspan = '<span style="color:purple">'; $nick = substr_replace($nick, "", 1, 2); echo("$date $nickspan$nick $message$es <br/> "); } else { $nickspan = '<span style="color:grey">'; $str = substr($nick, 2, 2); if($str=="03"){ $nick = substr_replace($nick, "", 2, 2); } echo("$date $nickspan$nick$es $message <br/> "); } } } } ?> 

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

Вы ищете функцию array_slice :

array_slice() возвращает последовательность элементов из массива массива, как указано смещением

 $lines = file(...); $lines = array_slice($lines, -50); 

Используйте array_slice() чтобы array_slice() последние 50 элементов $lines до запуска цикла foreach() { } .

 $lines = array_slice($lines, -50); 

Другая альтернатива – это сделать свой расчет и пропустить все, кроме X последних:

 $last = 50; $count = count($lines); foreach ($lines as $line) { if ($count-- > $last) continue; ...