Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Warning: array_multisort(), [function.array-multisort]: Argument #1 is expected to be an array..
krystian_grzesia...
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 18.08.2012

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


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.

Ten post edytował krystian_grzesiak 19.08.2012, 13:26:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
kondziu9516
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 1
Dołączył: 9.08.2011
Skąd: Bielsko Biała

Ostrzeżenie: (20%)
X----


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.

Ten post edytował kondziu9516 19.08.2012, 13:21:13
Go to the top of the page
+Quote Post
krystian_grzesia...
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 18.08.2012

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


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 ;)
Go to the top of the page
+Quote Post
klocu
post
Post #4





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

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


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();


Ten post edytował klocu 19.08.2012, 14:00:17
Go to the top of the page
+Quote Post
krystian_grzesia...
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 18.08.2012

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


Przetestowałem funkcję - wszystko działa jak należy, o to chodziło. Dziękuję! Temat do zamknięcia.
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 Aktualny czas: 19.08.2025 - 07:50