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

Элина

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

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

Пыталась с sort-ами что-то придумать, но ничего не вышло - то сортировка по алвафиту, то по ключам... мне это не надо... нужно просто в порядке, обратном тому, в котором они идут в файле.
 

iliah

Новичок
самый простой вариант:
$f = file('file.txt');
$a = array_slice($f, count($f) - 25, 25);
$a = array_reverse($a);
 

FANTAzeRus

Guest
<?
$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 строк, а потом уже отсортировать! ;(
 

Фанат

oncle terrible
Команда форума
А можно как-то сначала считывать весь файл, а потом брать последние 25 строк и сортировать их в обратном порядке?
вообще-то, два приведённых выше примера именно это и делают.
если Вы случайно не заметили
То есть даже считывать именно весь файл не обязательно
не обязательно. Но Вам это будет слишком сложно.
поэтому считывать лучше весь.
необходимо именно сначала считать последние 25 строк, а потом уже отсортировать!
а в чём разница?
 

Элина

Новичок
Ладненько, спасибо Вам всем огромное, сейчас буду пытаться сделать :)
 

chisto_tolyan

Враг народа
$file = file('file.txt');
for($i=count($file);$i>count($file)-25;$i--){
echo $file[$i];
}
упс, провтыкал последние посты)
 

Фанат

oncle terrible
Команда форума
нормально.
единственный нормальный код на всю тему.
 

master_x

Pitavale XXI wieku
да уж... особенно если учесть, что при выполнении каждой итерации считается размер массива... хорош код.
 

master_x

Pitavale XXI wieku
for($i=count($file);$i>count($file)-25;$i--) Не есть хорошо при большом размере массива

-~{}~ 16.08.05 18:01:

$size=count($file);
for($i=$size;$i>($size-25);$i--)...
 

chisto_tolyan

Враг народа
откуда такие мысли?)
ЗЫ. про большой размер массива в данном случае никто и не думает)
 

master_x

Pitavale XXI wieku
сам тестил при больших массивах... цикл работает в два раза медленнее. В таких случаях надо выносить из условия любые функции (если это не вредит циклу).

-~{}~ 16.08.05 18:05:

а массив наверняка будет большим, раз автор использует его как некое подобие БД...
 

chisto_tolyan

Враг народа
Конечный вариант:
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>';
пользуйтесь наздоровье)
 

master_x

Pitavale XXI wieku
to Бресь Сергей
зря тыкаешь в ссылку, сам делал сравнительные тесты с php 4. Точно версию не помню т.к. уже пересел на 5.
 

Элина

Новичок
Ребята, спасибо Вам всем огромное :) Я уже все сделала, благодаря помощи замечательных людей с этого форума - то есть Вам!
 
Сверху