Как реализовать вывод файлов в обратно отсортированном виде (т.е. последние добавленные файлы выводятся в начале) по времени последнего изменения файла ( filemtime() )
Так как readdir() читает файлы по порядку ( типа astronomiya.txt , moi-zadumki.txt и т.д. ) по названию самого файла (англ. алфавит). Если позднее добавить файл v-sporte.txt , то он откроется последним. А надо чтобы был первым, так он является свежим постом.
Без сортировки код выглядит так:
PHP:
скопировать код в буфер обмена
//формирует и выводит превью постов в цикле function ShowSmallPosts ($get_cat) { $handle_cat = opendir ("content/$get_cat"); while ($file = readdir ($handle_cat)) { if (preg_match('/[a-z0-9\-]+\.txt/', $file) == true && $file != 'home.txt') { preg_match('/@title@(.*)@title@/', $tmp_file, $name_post); preg_match('/@text@(.*)@text@/', $tmp_file, $text_post); //формируем массив названий файлов без расширения .txt $small_text = substr ($text_post[1 ], 0 , 200 ); echo "<h2><a href='index.php?cat=$get_cat&post=$file'>$name_post[1]</a></h2>"; echo "<div class='text'>$small_text...</div><br /><a href='index.php?cat=$get_cat&post=$file'>Прочитать</a><br /><br />"; } } }
Вот кое-что начал написал, но надо дописать до конца:
PHP:
скопировать код в буфер обмена
//СОРТИРОВКА function ShowSmallPostsOnSort ($get_cat) { $handle_cat = opendir ("content/$get_cat"); while ($file = readdir ($handle_cat)) { if (preg_match('/[a-z0-9\-]+\.txt/', $file) == true && $file != 'home.txt') { $tmp_mtime[$i] = filemtime("content/$get_cat/$file"); $i++; } } rsort ($tmp_mtime); //пересортировка $i = 0; while ($file = readdir ($handle_cat)) { if (preg_match('/[a-z0-9\-]+\.txt/', $file) == true && $file != 'home.txt' && filemtime("content/$get_cat/$file") == $tmp_mtime[$i]) { preg_match('/@title@(.*)@title@/', $tmp_file, $name_post); preg_match('/@text@(.*)@text@/', $tmp_file, $text_post); //формируем массив названий файлов без расширения .txt $small_text = substr ($text_post[1 ], 0 , 200 ); echo "<h2><a href='index.php?cat=$get_cat&post=$file'>$name_post[1]</a></h2>"; echo "<div class='text'>$small_text...</div><br /><a href='index.php?cat=$get_cat&post=$file'>Прочитать</a><br /><br />"; $i++; } } }
Подскажите как выполнить логику и добавить его в цикл с выводом: если время последнего изменения файла совпадает со значением времени первого элемента отсортированного массива, то вывести данные именно этого файла, и так далее, пока все файлы не выведутся.
Зашел в тупик именно с переборкой файлов при чтении до совпадения с значением в массиве $tmp_mtime (Отредактировано автором: 05 Августа, 2011 - 12:45:25)
|