Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sortowanie jak w MySQL
KsaR
post
Post #1





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


  1. $provinces=array(...);
  2. arsort($provinces);
  3. var_dump($provinces);
  4. krsort($provinces);
  5. var_dump($provinces);

Kod
array(16) { ["Warmińsko-Mazurskie"]=> string(1) "1" ["Kujawsko-Pomorskie"]=> string(1) "1" ["Śląskie"]=> string(1) "0" ["Pomorskie"]=> string(1) "0" ["Świętokrzyskie"]=> string(1) "0" ["Wielkopolskie"]=> string(1) "0" ["Zachodniopomorskie"]=> string(1) "0" ["Podlaskie"]=> string(1) "0" ["Opolskie"]=> string(1) "0" ["Lubuskie"]=> string(1) "0" ["Lubelskie"]=> string(1) "0" ["Łódzie"]=> string(1) "0" ["Małopolskie"]=> string(1) "0" ["Dolnośląskie"]=> string(1) "0" ["Mazowieckie"]=> string(1) "0" ["Podkarpackie"]=> string(1) "0" } array(16) { ["Świętokrzyskie"]=> string(1) "0" ["Śląskie"]=> string(1) "0" ["Łódzie"]=> string(1) "0" ["Zachodniopomorskie"]=> string(1) "0" ["Wielkopolskie"]=> string(1) "0" ["Warmińsko-Mazurskie"]=> string(1) "1" ["Pomorskie"]=> string(1) "0" ["Podlaskie"]=> string(1) "0" ["Podkarpackie"]=> string(1) "0" ["Opolskie"]=> string(1) "0" ["Małopolskie"]=> string(1) "0" ["Mazowieckie"]=> string(1) "0" ["Lubuskie"]=> string(1) "0" ["Lubelskie"]=> string(1) "0" ["Kujawsko-Pomorskie"]=> string(1) "1" ["Dolnośląskie"]=> string(1) "0" }


Jak widac pierwszy po pierwszym dumpie, posortowało wartosciami malejąco.
Drugi psuje wszystko.

Chce posortowac coś typu MySQL że zapamieta poprzednie sortowanie i przy kolejnym posortuje na tej samej tablicy ale nie od nowa...

W Mysql bym to zrobil: ORDER BY `values` DESC, `keys` DESC

Mam nadzieje że wyraziłem się jasno :|
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
daniel1302
post
Post #2





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


Ewidentnie nie przeczytałeś tego co podesłał Crozin
Funkcja usort przyjmuje dwa parametry:
bool usort ( array &$array , callable $value_compare_func )

Tablice oraz funkcje(nazwe funkcji zapisaną w "") która będzie porównywać nazweją
  1. callback
.

Funkcja callback, przyjmuje dwa parmaetry(Pierwszy lepszy przykład z manuala)

  1. function callback($a, $b)
  2. {
  3. if ($a == $b) {
  4. return 0;
  5. }
  6. return ($a < $b) ? -1 : 1;
  7. }


$a i $b to dwa elementy z tablicy. I jeśli a i b są równe to zwraca 0, jeśli a < b to zwraca -1 a jeśli przeciwnie to 1

I wystarczy, że dostosujesz funkcje do siebie. Następnym razem czyaj dokumentacje ze zrozumieniem jeśli nie potrafisz czytać po angielsku to dwa wyjścia meczyć się z translatorem albo uczyć języka.

Ten post edytował daniel1302 26.01.2015, 08:32:29
Go to the top of the page
+Quote Post
KsaR
post
Post #3





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


Cytat(daniel1302 @ 26.01.2015, 08:30:31 ) *
Ewidentnie nie przeczytałeś tego co podesłał Crozin
Funkcja usort przyjmuje dwa parametry:
bool usort ( array &$array , callable $value_compare_func )

Tablice oraz funkcje(nazwe funkcji zapisaną w "") która będzie porównywać nazweją
  1. callback
.

Funkcja callback, przyjmuje dwa parmaetry(Pierwszy lepszy przykład z manuala)

  1. function callback($a, $b)
  2. {
  3. if ($a == $b) {
  4. return 0;
  5. }
  6. return ($a < $b) ? -1 : 1;
  7. }


$a i $b to dwa elementy z tablicy. I jeśli a i b są równe to zwraca 0, jeśli a < b to zwraca -1 a jeśli przeciwnie to 1

I wystarczy, że dostosujesz funkcje do siebie. Następnym razem czyaj dokumentacje ze zrozumieniem jeśli nie potrafisz czytać po angielsku to dwa wyjścia meczyć się z translatorem albo uczyć języka.


Zauważ że wyżej próbowałem zrobić ten callback więc chyba przeczytałeś tylko post Crozin'a z uwagą.
" usort($provinces, 'arsortdesc'); " <i callback jest w cudzysłowie. Jednak dalej nie ogarniam tego co tam robić, poprostu nie na mój mózg opis tej funkcji. | znalezłem inne wyjscie gdzies na stackoverflow(troche przerobiłem nazwy zmiennych):

  1. function arrSort($arr)
  2. {
  3. $isKey=array();
  4. $isVal=array();
  5. foreach($arr as $key=>$value)
  6. {
  7. $isKey[]=$key;
  8. $isVal[]=$value;
  9. }
  10. array_multisort($isVal,SORT_DESC,$isKey,SORT_ASC,$arr);
  11. return $arr;
  12. }

niestety nie uwzględnia sortowania utf8 ale może być.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 23:02