Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Argumenty dla array_mulisort
Forum PHP.pl > Forum > Przedszkole
kontur
Potrzebuje zrobic sortowanie tablicy $daneH wg poszczegolnych kolumn i na rozne sposoby. Poniewaz zawsze chce rozpoczynac sortowanie od kolumny $col utworzylem tablice $indeks, ktora przechowuje mi wszystkie pozostale indeksy z wykluczeniem $col.
  1. array_multisort($daneH[$col], SORT_DESC, SORT_STRING,
  2. $daneH[$indeks[0]], SORT_ASC, SORT_NUMERIC,
  3. $daneH[$indeks[1]], SORT_ASC, SORT_NUMERIC,
  4. $daneH[$indeks[2]], SORT_ASC, SORT_NUMERIC,
  5. $daneH[$indeks[3]], SORT_ASC, SORT_STRING);
  6.  


i teraz problem:

argumenty tej funkcji typu SORT_DESC, SORT_ASC, SORT_STRING itd nie sa stringami. Gdy probuje przekazywac za pomoca petli np. jako 3 argument $sort_type[2]='SORT_NUMERIC' wystepuje blad-komunikat, ze funkcja oczekuje tablicy. Rozumiem skad on sie bierze, natomiast pytanie jest takie: czy jest jakies inne rozwiazanie niz produkowanie switcha z 25 case'ami?
mortus
Nie do końca rozumiem problem, ale SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING to stałe, które możemy zastąpić odpowiadającymi im cyframi - 4, 3, 0, 1, 2.
kontur
Cytat(mortus @ 3.05.2012, 20:20:23 ) *
Nie do końca rozumiem problem, ale SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING to stałe, które możemy zastąpić odpowiadającymi im cyframi - 4, 3, 0, 1, 2.


Funkcja jest "odporna" na takie wywolanie:
  1. array_multisort($daneH[$col], $sort_kind, $type,
  2. ...
  3. ...
  4. );


chcialem posprawdzac kilka warunkow i uzyc jej w petli zamiast pisac przydlugiego switcha i okazalo sie ze nydyrydy.

Ucze sie programowac z ksiazki Włodzimierza Gajdy "Praktyczne projekty", autor do sortowania 5-kolumnowej tablicy uzywa konstrukcji

  1. switch ($kryterium) {
  2.  
  3. case 1:
  4. $dane[0], SORT_ASC, SORT_STRING,
  5. $dane[1], SORT_ASC, SORT_STRING,
  6. $dane[2], SORT_ASC, SORT_NUMERIC,
  7. $dane[3], SORT_ASC, SORT_STRING,
  8. $dane[4], SORT_ASC, SORT_NUMERIC
  9. );
  10. break;
  11.  
  12. case 2:
  13. $dane[1], SORT_ASC, SORT_STRING,
  14. $dane[0], SORT_ASC, SORT_STRING,
  15. $dane[2], SORT_ASC, SORT_NUMERIC,
  16. $dane[3], SORT_ASC, SORT_STRING,
  17. $dane[4], SORT_ASC, SORT_NUMERIC
  18. );
  19. break;
  20.  
  21. case 3:
  22. $dane[2], SORT_ASC, SORT_NUMERIC,
  23. $dane[1], SORT_ASC, SORT_STRING,
  24. $dane[0], SORT_ASC, SORT_STRING,
  25. $dane[3], SORT_ASC, SORT_STRING,
  26. $dane[4], SORT_ASC, SORT_NUMERIC
  27. );
  28. break;
  29.  
  30. ...


i tak wypisuje 10 casow.

Jako leniwy czlowiek pomyslalem ze po co tyle pisac, jak mozna inaczej:
* sprawdzic wg ktorej z 5 kolumn chcemy sortowac,
* stworzyc tablice ze wszystkimi pozostalymi indeksami,
* za pomoca is_int()sprawdzic ktoree elementy chcemy wywolac z SORT_NUMERIC a ktore z SORT_STRING - zapisac po kolei w tablicy $type
i wywolac
  1. array_multisort($daneH[$col], $sort_kind, $type[0],
  2. $daneH[$index[0]], $sort_kind, $type[1]
  3. ...
  4. );
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.