Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Argumenty dla array_mulisort
kontur
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

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


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?

Ten post edytował kontur 3.05.2012, 18:19:58
Go to the top of the page
+Quote Post
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


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.
Go to the top of the page
+Quote Post
kontur
post
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

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


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


Ten post edytował kontur 3.05.2012, 19:52:21
Go to the top of the page
+Quote Post
redeemer
post
Post #4





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


http://www.php.net/manual/en/function.constant.php


--------------------
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: 21.08.2025 - 09:59