Все ленты — последние статьи

Отображение информации и ее сортировка

Автор: Mostom

Привет! Вы знаете, очень часто встречаю на форумах вопросы типа: [Как мне сделать чтобы записи из файла отображались не с первой по последнюю, а наоборот, в обратном порядке?]. Уже ответов пять наверное написал… Люди совсем не хотят думать, хотя делается это элементарно!
Собственно, показать записи в обратном порядке можно двумя способами:
1. Записать информацию наоборот
2. Записывать информацию обычно, а показывать наоборот

У каждого из способов есть свои особенности, о которых я расскажу далее. Итак, сначала первый способ. Еще на процессе записи скриптом информации в файл пишем вот что:

 

<?php
$fh = fopen("file.txt", "r");
$all_notes = fread($fh, filesize("file.txt"));
fclose($fh);
$fh2 = fopen("file.txt", "w");
fwrite($fh2, $new_note);
fwrite($fh2, $all_notes);
fclose($fh2);
?>

file.txt — имя файла с записями;
$new_note — новая запись;
$all_notes — записи, хранящиеся в файле.
Суть в том, что мы открываем файлик с записями (при этом выставляем параметр [Только чтение]) и считываем все его содержимое в переменную (строчка 3). А потом опять открываем этот же файлик, но уже с другим параметром ([Только запись] — все содержимое файла удаляется), записываем в него новую запись, а потом все старые. Вот вам и обратная запись.
Сей способ рекомендуется применять, когда данные занимают больше одной строчки, например стихи или анекдоты. В этом случае данный скрипт подходит почти идеально.
Но бывают случаи, когда не принципиально, в каком порядке расположены записи в файле. В этом случае можно организовать обратный вывод (Вывод, а не запись!) таким образом:

1
2
3

<?php
$fh = file("file_name.txt");
$fh = array_reverse($fh);
for ($i=0; $i<count($fh); $i++) echo $fh[$i];
?>

Считываем содержимое файла в массив, затем с помощью функции array_reverse() переворачиваем его задом-наперед (сверху вниз / наизнанку / шиворот-навыворот ? ), и с помощью цикла выводим. А можно не переворачивая, просто настроить сам цикл на обратный вывод:

1
2

<?php
$fh = file("file_name.txt");
for ($i = count($fh); $i>0; $i--) echo $fh[$i-1];
?>

Здесь тоже все строки файла считываем в массив, а потом просто выводим его наоборот с помощью цикла. Два последних скрипта нужно размещать при непосредственном выводе записей для пользователя. Использовать его нужно, когда не важно, как записаны записи в файл, т.е. например в скрипте комментариев, гостевых книг, лент новостей и т.д. Короче, если в файле информация хранится в виде (грубо):
Миша www.cngroup.ru Отличная статья! Мне понравилась!
Вова www.cngroup.ru О, Мишка! Да ты дописал свою статью! Свершилось! :)
Миша www.cngroup.ru Да, дописал :) . Пойдет?

То для вас подойдет второй вариант.
Надеюсь, эта статья поможет вам, и одинаковых вопросов на форумах РуНета станет меньше? . В следующий раз, если увижу подобный вопрос, дам ссылку на наш сайт на страничку со статьей. Осталось только дождаться, когда mr.dsrtmn допишет движок. Вова, я, пользуясь своим положением автора и главреда обращаюсь к тебе от имени редакции с просьбой запустить наконец-то сайтик в сеть! Думаю, я выразил заодно и общее мнение наших читателей.
Вот в принципе и все! С уважением, Mostom.