Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Jak posortować nazwy plików?, Opendir, readdir i te sprawy... :-)
*_ENIGMA
post 4.11.2004, 19:30:48
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 1.11.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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


--------------------
EnigmaCretu.Com >>
Go to the top of the page
+Quote Post
mike
post 4.11.2004, 19:42:08
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
*_ENIGMA
post 5.11.2004, 01:25:11
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 1.11.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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...


--------------------
EnigmaCretu.Com >>
Go to the top of the page
+Quote Post
Paul
post 5.11.2004, 01:40:37
Post #4





Grupa: Zarejestrowani
Postów: 636
Pomógł: 0
Dołączył: 22.10.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.06.2025 - 12:49