Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Warning: array_multisort()
Forum PHP.pl > Forum > Przedszkole
krystian_grzesiak
Witam wszystkich. To mój pierwszy post na tym forum.

Jestem początkującym programistą PHP, niedawno zacząłem przygodę z tym językiem.

Proszę o poradę - jak rozwiązać problem z sortowaniem tablicy?
Próbuję wylistować katalog plików w porządku rosnącym względem daty modyfikacji. Wszystko działa do momentu sortowania. Około 5 godzin szukałem i próbowałem rozwiązać problem sam, ale w końcu się przełamałem i proszę o pomoc bardziej doświadczonych osób, które mogą mi wyjaśnić gdzie popełniłem błąd.

  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. function wyswietl_zawartosc()
  6. {
  7. $sciezka = 'zawartosc/z1/';
  8. $katalog = opendir($sciezka);
  9.  
  10. $i = 0;
  11.  
  12. while($plik = readdir($katalog))
  13. {
  14. $data = date('j-m-Y H:i', filemtime($sciezka.$plik));
  15.  
  16. $nazwa_pliku = explode('.', $plik); // Usunięcie końcówki ".txt" z nazwy.
  17. $nazwa = $nazwa_pliku[0];
  18.  
  19. if(($plik!=".")&&($plik!="..")&&(!is_dir($sciezka.$plik)))
  20. {
  21. $pliki[$i] = array("nazwa" => $nazwa, "data" => $data);
  22. $i++;
  23. }
  24. }
  25.  
  26. echo $i;
  27.  
  28. foreach ($pliki as $klucz => $wiersz)
  29. {
  30. $nazwa[$klucz] = $wiersz['nazwa'];
  31. $data[$klucz] = $wiersz['data'];
  32. }
  33.  
  34. array_multisort($nazwa, SORT_ASC, $data, SORT_ASC, $pliki);
  35. print_r($pliki);
  36. }


Funkcja wyrzuca błąd "Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in C:\WebServ\httpd\cms\CMS\PHP\sortuj.php on line 37" i nie sortuje danych.

Z góry dziękuję, pozdrawiam.
kondziu9516
Ja bym to zrobił zapytaniem do bazy danych
Nie wiem czy dobrze myślę...

  1. mysql_query(SELECT COUNT(*) FROM tabela ORDER BY id DESC)


Ale to musiałbyś to zrobić na bazie danych.
krystian_grzesiak
Akurat sęk w tym, że nie chcę korzystać z bazy danych ponieważ nie opłaca mi się jej tworzyć jako alternetywy dla jednego folderu zawierającego max 15 plików ;)
klocu
No akurat korzystanie z bazy to byłby zły przykład - bo zrobisz najmniejszą zmianę i synchronizuj wszystkie rekordy.

A dlaczego nie działa?
Proste! Linia (18) zmienna $nazwa jako string. Linia (31) $nazwa jako tablica bez wcześniejszej inicjalizacji czy zerowania.
A po drugie - nie stosuj obcinania końcówki z nazwy pliku, bo dowolną nazwą pliku jestem ci w stanie zwrócić niespodziewane rezultaty. Do tego jest funkcja + przełączniki i trzeba je stosować.

  1. <?php
  2.  
  3. ini_set('display_errors', 1);
  4.  
  5. function wyswietl_zawartosc()
  6. {
  7. $sciezka = './';
  8. $katalog = opendir($sciezka);
  9.  
  10. $i = 0;
  11.  
  12. while($plik = readdir($katalog))
  13. {
  14. $data = filemtime($sciezka.$plik);
  15. $nazwa = pathinfo($sciezka.$plik, PATHINFO_FILENAME);
  16. $rozsze = pathinfo($sciezka.$plik, PATHINFO_EXTENSION);
  17.  
  18. if($plik != '.' && $plik != '..' && !is_dir($sciezka.$plik))
  19. {
  20. $pliki[$i] = array('nazwa' => $nazwa, 'rozszerzenie' => $rozsze, 'data' => $data, 'data2' => date('Y-m-d H:i:s', $data));
  21. $i++;
  22. }
  23. }
  24.  
  25. foreach($pliki as $klucz => $wiersz)
  26. {
  27. $nazwa2[] = $wiersz['nazwa'];
  28. $data2[] = $wiersz['data'];
  29. }
  30.  
  31. array_multisort($data2, SORT_ASC, $nazwa2, SORT_ASC, $pliki);
  32. print_r($pliki);
  33. }
  34.  
  35. wyswietl_zawartosc();
krystian_grzesiak
Przetestowałem funkcję - wszystko działa jak należy, o to chodziło. Dziękuję! Temat do zamknięcia.
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.