Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak posortować nazwy plików?
Forum PHP.pl > Forum > Gotowe rozwiązania
*_ENIGMA
Witajcie!

Napisałem skrypcik, który odczytuje nazwy plików z wybranego folderu (np. 05112004.log), rozbija nazwy na czynniki pierwsze, aby potem złożyć je do fomatu daty (np. 05.11.2004)...
Niestety wyświetla mi pozycje nie w takiej kolejności jakbym tego chciał, lecz w zależności od ustawień systemowych sortowania plików wg różnych kryteriów...

I moje pytanie brzmi: jak posortować nazwy plików w określonej kolejności?

Oto skrócony kod skryptu, a pod nim opis działania:



Kod
<?php
$dir = ".";
if (is_dir($dir)) {
   if ($dh = opendir($dir)) {
       while (($file = readdir($dh)) !== false) {
           if ($file != "." && $file != ".." && $file != "readstat.php" && $file != "addstat.php" && $file != "viewstat.php") {
               $exp = explode(".", $file);
               $md = md5($exp[0]);
               $s1 = substr($exp[0], 0, 2);
               $s2 = substr($exp[0], 2, 2);
               $s3 = substr($exp[0], 4, 4);
               echo("<a href=\"viewstat.php?ID=$exp[0]\">$s1.$s2.$s3 $file</a><br />");
           }
       }
       closedir($dh);
   }
}

?>



Całość działa w ten sposób, że odczytuje z danego folderu pliki z logami statystyk z każdego dnia, np. 03112004.log, 04112004.log... itp... gdzie ciąg znaków przed rozszerzeniem pliku to najzwyklejsza data w formacie ddmmrr...
Za pomocą funkcji explode() rozbijam poszczególne nazwy plików na człon daty i rozszerzenie.
Następnie z ciągu ddmmrr wyciągam za pomocą funkcji substr() fragmenty ciągu - odpowiednio: 2 pierwsze znaki (na dzień), 2 kolejne (na miesiąc) i 4 następne (na rok). Potem między te elementy w echo() wstawiam kropki aby stworzyć najzwyklejszy link wyświetlający datę wejścia na serwis...

Niestety w przeglądarce dostaję coś takiego:



Kod
02.11.2004
04.11.2004
03.11.2004
05.11.2004
06.11.2004



itp...

Jak zmodyfikować ten skrypt aby posortować wyświetlane daty np. rosnąco lub malejąco, a nie chaotycznie (vel według ustawień systemowych)questionmark.gif

Z pozdrowieniami

Adrian
mike
Zapisuj daty jako znacznik czasu Unix'a. Będzie ci je potem łatwo sortowwać (jako zwykłe liczby) i będziesz miał większy wachlarz mozliwości przy ich formatowaniu.
Znacznik Unix'a = brak problemu.
*_ENIGMA
Hmmm...
Ja myślałem o użyciu może tablic...
Ale niestety nie znam ich na tyle dobrze, żeby je ulokować w tym skrypcie...
Paul
Ciezko jest cokolwiek sortowac bez uzycia tablic winksmiley.jpg -> sort -- Sort an array

mike_mech: mktime" title="Zobacz w manualu PHP" target="_manual smile.gif
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-2024 Invision Power Services, Inc.