Отображение информации и ее сортировка
Автор: Mostom
Привет! Вы знаете, очень часто
встречаю на форумах вопросы типа: [Как мне сделать чтобы
записи из файла отображались не с первой по последнюю, а
наоборот, в обратном порядке?]. Уже ответов пять наверное
написал… Люди совсем не хотят думать, хотя делается это
элементарно!
Собственно, показать записи в обратном
порядке можно двумя способами:
1. Записать информацию
наоборот
2. Записывать информацию обычно, а показывать
наоборот
У каждого из способов есть свои особенности,
о которых я расскажу далее. Итак, сначала первый способ. Еще
на процессе записи скриптом информации в файл пишем вот что:
1
2
3
4
5
6
7
<?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.