PHP: Как искать в обратном направлении, чтобы найти последние N строк - PullRequest
4 голосов
/ 26 мая 2011

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


Обновление: Для тех, кто заинтересован, я последовал совету, который получил в принятом ответе, и попытался реализовать на себе. Поместите это в мой блог =)

Ответы [ 4 ]

6 голосов
/ 26 мая 2011

То есть, вам нужны последние n строки строки?

function getLastLines($string, $n = 1) {
    $lines = explode("\n", $string);

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

    return implode("\n", $lines);
}

Затем вы можете вызвать это с помощью getLastLines($str, $num);, где $num - положительное целое число, а $str - строкаВы хотите нарезать.

Если вы хотите что-то другое, например, с использованием файла в качестве источника, вам нужно что-то другое - возможно, с использованием file вместо explode.

4 голосов
/ 26 мая 2011

Вы должны воспроизвести tail, в основном.Откройте файл, прыгните до конца, затем начните чтение назад.Чтение фрагмента, подсчет разрывов строк, повторение до тех пор, пока счетчик разрыва строк не превысит желаемое количество строк, а затем выгрузит все, начиная с одного перехода на следующую строку.

0 голосов
/ 26 мая 2011

Если вы используете file () для чтения файла в виде массива, вы можете использовать array_splice для указания последних N строк:

test.txt

1
2
3
4
5
6
7
8
9
10

test.php

$lines = file('test.txt');
$line_number = 5;

echo implode("", array_splice($lines, count($lines) - $line_number));

выход

$ php test.php
6
7
8
9
10
0 голосов
/ 26 мая 2011

Самый простой способ - использовать файл.Он загружает весь файл в массив, по одной строке на элемент.Используйте count для подсчета общего количества строк, вычтите 100 en из этого индекса, и вы можете делать со строками все, что вы хотите.

http://nl.php.net/manual/en/function.file.php

Для очень больших файлов это не очень эффективно.Тогда вам лучше использовать fstat, чтобы получить размер файла, fseek - вернуться назад на x байтов, посчитать количество строк, которые вы можете прочитать, и, возможно, искать дальше, пока не найдете 100 строк.Бьюсь об заклад, такие инструменты, как tail, не считаются с самого начала, но делают что-то похожее.

...