Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: array_multisort - zgodnie z instrukcja a błąd.
Forum PHP.pl > Forum > PHP
MalyKazio
Witam

Mam problem (drugi już dzisiaj). Tym razem chodzi o funkcję array_multisort. Wszystko działa tylko wyskakuje mi komunikat:
Warning: array_multisort(): Argument #1 is expected to be an array or a sort flag in /test/moduly/Ranking/pies.php on line 1403

Całość wygląda tak: (wzór wzięty z manuala)

  1. <?php
  2. $querykal1 = "SELECT ranking.wystawa, wystawy.nazwa, wystawy.dzien, wystawy.miesiac, wyst
    awy.rok FROM ranking
  3. LEFT JOIN ( wystawy) ON ( wystawy.nr = ranking.wystawa ) WHERE pies = $_GET[pies]";
  4. $wynikkal1 = mysql_query($querykal1);
  5. $znalezionokal1 = mysql_num_rows($wynikkal1);
  6. if($znalezionokal1!=0) {
  7. while ($rowkal1 = mysql_fetch_assoc($wynikkal1)) {
  8.  
  9. $dane[] = array('dzien' => $rowkal1[dzien], 'miesiac' => $rowkal1[miesiac], 'rok' => $rowkal1[rok], 'wydarzenie' => $rowkal1[nazwa]);
  10.  
  11. }
  12. mysql_free_result($wynikkal1);
  13. }
  14.  
  15. $querykal12 = "SELECT * FROM kalendarium WHERE pies = $_GET[pies]";
  16. $wynikkal12 = mysql_query($querykal12);
  17. $znalezionokal12 = mysql_num_rows($wynikkal12);
  18. if($znalezionokal12!=0) {
  19. while ($rowkal12 = mysql_fetch_assoc($wynikkal12)) {
  20.  
  21. $dane[] = array('dzien' => $rowkal12[dzien], 'miesiac' => $rowkal12[miesiac], 'rok' => $rowkal12[rok], 'wydarzenie' => $rowkal12[wydarzenie]);
  22.  
  23. }
  24. mysql_free_result($wynikkal12);
  25. }
  26.  
  27. if(!empty($dane)) {
  28. // Pobierz listę kolumn
  29. foreach ($dane as $klucz => $wiersz) {
  30.  $dzien[$klucz] = $wiersz['dzien'];
  31.  $miesiac[$klucz] = $wiersz['miesiac'];
  32.  $rok[$klucz] = $wiersz['rok'];
  33.  $wydarzenie[$klucz] = $wiersz['wydarzenie'];
  34. }
  35.  
  36. // Posortuj dane według numeru malejąco i edycji rosnąco
  37. // Należy podać $dane jako ostatni parametr aby posortować według wspólnego
  38. // klucza
  39. array_multisort($rok, SORT_DESC, $miesiac, SORT_DESC, $dzien, SORT_DESC, $dane);
  40.  
  41.  
  42.  
  43. foreach ($dane as $klucz => $wiersz) {
  44. ?>


Nie wiem gdzie jest błąd bo taka sama składnia array_multisort jest w manualu.
legorek
Wygląda na to, że $rok to nie tablica. Zrób sobie var_duump($rok).

Nie obraź się, ale kod jest xle skonstruowany. Sortuj dane już przy wyciąganiu ich z tabeli. Po to MySQL ma mechanizmy sortujące.

Aha zamiast: $_GET[pies] $_GET['pies'] bo to jest podręcznikowy błąd.
MalyKazio
Hmm... faktycznie wyszło, że $rok to nie tablica. Ale tworzony jest tak samo jak reszta.
Sortowałbym dane przy wyciąganiu z tabel tylko, że problem jest tego rodzaju, że najpierw musze wyciągnąc wydarzenia z 2 tabel i dopiero po ich złączeniu jakoś posortować. Da się to jakoś obejść?
misiek172
Cytat(legorek @ 13.12.2006, 23:46:28 ) *
Aha zamiast: $_GET[pies] $_GET['pies'] bo to jest podręcznikowy błąd.


no to takie nie dokońca, oczywiście powinno sie robic ['pies'] ale bez apostrofów równierz na 100% bedzie działać, i nie bedzie różnicy smile.gif, lecz nie powinno sie robic bez '' poniewaz to juz tak jest i juz
legorek
Cytat(misiek172 @ 16.12.2006, 11:20:27 ) *
no to takie nie dokońca, oczywiście powinno sie robic ['pies'] ale bez apostrofów równierz na 100% bedzie działać, i nie bedzie różnicy smile.gif, lecz nie powinno sie robic bez '' poniewaz to juz tak jest i juz


Może i działać będzie tylko dlatego, że php ma wielką tolerancje dla błędów programisty. Zapewniam Ci że jest to zły zapis i nie można go stosować. Napisanie pies bez apostrofów sugeruje odwołanie się do stałej pies, która nigdzie wcześniej nie jest zdefiniowana.

Prponuje takie zapytanie:
  1. SELECT ranking.wystawa, wystawy.nazwa, wystawy.dzien, wystawy.miesiac, wystawy.rok FROM ranking LEFT JOIN ( wystawy) ON ( wystawy.nr = ranking.wystawa ) WHERE pies = $_GET['pies'] ORDER BY wystawy.dzien DESC, wystawy.miesiac DESC, wystawy.rok DESC


Do trzymania dat jest specjalny typ pola DATE, który ułatwia takie rzeczy.
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.