Считать строки из файла в обратном порядке?

Элина

Новичок
Считать строки из файла в обратном порядке?

Здравствуйте! У меня такой вопрос - в файле содержится некоторое непостоянное кол-во строк, мне надо вывести через скрипт последние 25 строк в обратном порядке(!), это как-то возможно?

Пыталась с sort-ами что-то придумать, но ничего не вышло - то сортировка по алвафиту, то по ключам... мне это не надо... нужно просто в порядке, обратном тому, в котором они идут в файле.
 
самый простой вариант:
$f = file('file.txt');
$a = array_slice($f, count($f) - 25, 25);
$a = array_reverse($a);
 
<?
$a = array_reverse(file('test.dat'));
$lines = 25;
$size = sizeof($a);
$all=$size>$lines?$lines:$size;
for ($i=0; $i<=$all; $i++) {
echo $a[$i]."<br>";
}
?>
 
А можно как-то сначала считывать весь файл, а потом брать последние 25 строк и сортировать их в обратном порядке?

То есть даже считывать именно весь файл не обязательно, необходимо именно сначала считать последние 25 строк, а потом уже отсортировать! ;(
 
А можно как-то сначала считывать весь файл, а потом брать последние 25 строк и сортировать их в обратном порядке?
вообще-то, два приведённых выше примера именно это и делают.
если Вы случайно не заметили
То есть даже считывать именно весь файл не обязательно
не обязательно. Но Вам это будет слишком сложно.
поэтому считывать лучше весь.
необходимо именно сначала считать последние 25 строк, а потом уже отсортировать!
а в чём разница?
 
Ладненько, спасибо Вам всем огромное, сейчас буду пытаться сделать :)
 
$file = file('file.txt');
for($i=count($file);$i>count($file)-25;$i--){
echo $file[$i];
}
упс, провтыкал последние посты)
 
нормально.
единственный нормальный код на всю тему.
 
да уж... особенно если учесть, что при выполнении каждой итерации считается размер массива... хорош код.
 
for($i=count($file);$i>count($file)-25;$i--) Не есть хорошо при большом размере массива

-~{}~ 16.08.05 18:01:

$size=count($file);
for($i=$size;$i>($size-25);$i--)...
 
откуда такие мысли?)
ЗЫ. про большой размер массива в данном случае никто и не думает)
 
сам тестил при больших массивах... цикл работает в два раза медленнее. В таких случаях надо выносить из условия любые функции (если это не вредит циклу).

-~{}~ 16.08.05 18:05:

а массив наверняка будет большим, раз автор использует его как некое подобие БД...
 
Конечный вариант:
PHP:
$file      = file('file.txt');
$result = array();
for($i=count($file);$i>(count($file)-25);$i--){
$result[] = $file[$i];
}
asort($result);
echo '<PRE>';
print_r($result);
echo '</PRE>';
пользуйтесь наздоровье)
 
to Бресь Сергей
зря тыкаешь в ссылку, сам делал сравнительные тесты с php 4. Точно версию не помню т.к. уже пересел на 5.
 
Ребята, спасибо Вам всем огромное :) Я уже все сделала, благодаря помощи замечательных людей с этого форума - то есть Вам!
 
Сверху