Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie listy plików
Forum PHP.pl > Forum > PHP
nexis
Witam,

mam kod, który sprawdza zawartość katalogu news w poszukiwaniu plików tekstowych o rozszerzeniu *.txt. Korzystam z funkcji scandir" title="Zobacz w manualu php" target="_manual do pobrania listy plików do tablicy, a następnie wyłapuje pliki *.txt sprawdzając ostatnie 3 znaki pliku. W wyniku tego otrzymuję listę plików w alfabetycznym porządku i wyświetlam ich nazwę oraz treść. Jak jednak posortować te pliki (czyli dane z tabeli) według daty ostatniej modyfikacji pliku?

Zdaje się, że przyda się do tego funkcja usort" title="Zobacz w manualu php" target="_manual, ale nie wiem jak z niej skorzystać. Proszę o pomoc.

  1. <?php
  2. if (PHP_VERSION >= '5') {
  3. $dir  = 'news/';
  4. $files  = scandir($dir);
  5. echo '<table border="1"><tr>';
  6. foreach ($files as $file) {
  7. $type = substr($file, -3, 3);
  8. if ($type == 'txt') {
  9. echo '<td><b>'.$file.'</b><br /><br />'.file_get_contents($dir.$file).'</td>';
  10. }
  11. }
  12. echo '</tr></table>';
  13. } else {
  14. echo 'Obecna wersja silnika php: '.PHP_VERSION.' jest zbyt niska dla wykonania tego kodu!';
  15. }
  16. ?>
zuczek
Nie wiem czy dobrze rozumiem, ale zdaje mi się że podczas przeszukiawania katalogu nalezy wylapac tez date modyfikaacji pliku i wg tej wartosci sortowac pliki.
nexis
Bardzo spostrzegawcza uwaga! tongue.gif To chyba rzecz jasna, ale jak to posortować?
Master Miko
No wiesz że możesz do tego użyć funkcji date...

date" title="Zobacz w manualu php" target="_manual

zamień na unixowy czas i potem sortuj wg tego co jest większe/mniejsze smile.gif
nexis
Cytat(Master Miko @ 2006-04-25 21:16:19)
No wiesz że możesz do tego użyć funkcji date

Jak się nie znasz to nie udzielaj takich odpowiedzi. Odpowiednim sposobem jest użycie funkcji filemtime" title="Zobacz w manualu php" target="_manual, która od razu zwraca czas UNIX i nie ma potrzeby żadnego konwertowania. Wpadłem już na pomysł utworzenia z tej tablicy:

Kod
Array ( [0] => pierwszy.txt [1] => drugi.txt )


Tablicę zawierającą datę ostatniej modyfikacji, żeby miała taką postać:

Kod
Array ( [pierwszy.txt] => 1145995864 [drugi.txt] => 1145995852 )


Za pomocą takiego kodu:

  1. <?php
  2. $new = array();
  3. foreach ($files as $file) {
  4. $time = filemtime($dir.$file);
  5. $new[$file] = $time;
  6. }
  7. ?>


Ale jak to teraz odpowiednio posortować według daty?

Zdaje się, że funkcja array_multisort" title="Zobacz w manualu php" target="_manual może tutaj pomóc, ale jeszcze się bawię jak ją prawidłowo użyć. Jeżeli ktoś wie to proszę o wskazówki.

ROZWIĄZANIE

Działa funkcja:

  1. <?php
  2. array_multisort ($new, SORT_NUMERIC, SORT_DESC);
  3. ?>


Temat można zamknąć.
Master Miko
chodziło mi o użycie funkcji date z filetime... ale jak się NIE znam to nie będę się już mistrzu wypowiadał. np tej własności nie pamiętałem...
chomiczek
Trochę tutaj za dużo kodu.. przecież jest funkcja GLOB" title="Zobacz w manualu php" target="_manual, a za jej pomocą można zrobic cos takiego:
  1. <?php
  2. $zawartosc = array();
  3. foreach (glob("*.php") as $filename) {
  4.  $zawartosc[$filename] = filesize($filename);
  5. }
  6. array_multisort ($zawartosc, SORT_NUMERIC);
  7. foreach ($zawartosc as $nazwa=>$rozmiar) {
  8. echo $nazwa.' - '.$rozmiar.'<br/>';
  9. }
  10. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.