Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie listy plików, według daty ostatniej modyfikacji
nexis
post 25.04.2006, 20:54:43
Post #1





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


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


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
zuczek
post 25.04.2006, 21:03:53
Post #2





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 6.06.2005
Skąd: CBŚ

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


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.


--------------------
"Kraj, który w technice nie postępuje, cofa się" - prof.S.Wł.Bryła
pajacyk.pl - a co Ci szkodzi kliknąć
SOS please someone help me...
Go to the top of the page
+Quote Post
nexis
post 25.04.2006, 21:05:47
Post #3





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


Bardzo spostrzegawcza uwaga! tongue.gif To chyba rzecz jasna, ale jak to posortować?


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
Master Miko
post 25.04.2006, 21:16:19
Post #4





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


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


--------------------
Go to the top of the page
+Quote Post
nexis
post 25.04.2006, 21:32:25
Post #5





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


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

Ten post edytował nexis 25.04.2006, 21:38:55


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
Master Miko
post 25.04.2006, 22:41:00
Post #6





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

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


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

Ten post edytował Master Miko 25.04.2006, 22:49:31


--------------------
Go to the top of the page
+Quote Post
chomiczek
post 26.04.2006, 10:15:41
Post #7





Grupa: Zarejestrowani
Postów: 271
Pomógł: 4
Dołączył: 5.01.2005

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


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


--------------------
created by chomiczek
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: 6.07.2025 - 16:53