Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Sortowanie tablicy dwuwymiarowej
mati251195
post 18.12.2012, 21:59:21
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 25.07.2012

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


Witam,
Nie wiem jak posorotwać tablicę dwuwymiarową w PHP, czytałem jakieś poradniki ale nie za wiele z nich rozumiem. Potrzebowałbym jakiś gotowy kod, jak go zobaczę to wtedy będę wiedział co i jak smile.gif Mam takie dane:

  1. numer | 1 wymiar | 2 wymiar
  2. --------+-----------+-----------
  3. 1 | 12 | 5
  4. 2 | 51 | 8
  5. 3 | 6 | 9
  6. 4 | 6 | 11
  7. 5 | 2 | 12


W taki sposób zapisuje dane do tablicy:
  1. $tablica[$news_id][0] = $data['news_name'];
  2. $tablica[$news_id][1] = $licznik;


Chę posorotwać malejąco tablicę według pierwszego wymiaru - możliwe, że paramtery będą się powtarzały (w kilku kolumnach 1 wymiar będzie jednakowy) to wtedy niech losuje także malejąco według 2 wymiaru.

Z góry dziękuję smile.gif
Go to the top of the page
+Quote Post
Kshyhoo
post 18.12.2012, 22:29:30
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




  1. // funkcja sortująca
  2. function cmp ($a, $b) {
  3. if ($a < $b) return -1;
  4. if ($a > $b) return 1;
  5. return 0;
  6. }
  7.  
  8. $tablica[0][0] = "1";
  9. $tablica[0][1] = "2";
  10. $tablica[0][2] = "3";
  11. $tablica[0][3] = "4";
  12. $tablica[0][4] = "5";
  13.  
  14. $tablica[1][0] = "12";
  15. $tablica[1][1] = "51";
  16. $tablica[1][2] = "6";
  17. $tablica[1][3] = "6";
  18. $tablica[1][4] = "2";
  19.  
  20. $tablica[2][0] = "5";
  21. $tablica[2][1] = "8";
  22. $tablica[2][2] = "9";
  23. $tablica[2][3] = "1";
  24. $tablica[2][4] = "12";
  25.  
  26. echo"Przed:<pre>";
  27. var_dump($tablica);
  28. echo"</pre>";
  29.  
  30. usort($tablica, "cmp");
  31.  
  32. echo"Po:<pre>";
  33. var_dump($tablica);
  34. echo"</pre>";


Ten post edytował Kshyhoo 18.12.2012, 22:30:12


--------------------
Go to the top of the page
+Quote Post
mati251195
post 19.12.2012, 00:13:09
Post #3





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 25.07.2012

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


Tak, tylko ja podałem 5 rekordów, a ja ich mam prawie 600 i są one pobierane z bazy MySQL i potrzebowałbym bym coś bardziej automatycznego biggrin.gif
Go to the top of the page
+Quote Post
Kshyhoo
post 19.12.2012, 10:26:17
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No chyba umiesz przypisać dane pobrane z bazy do tablicy? W MySQL są wbudowane funkcje do tego. Po za tym, trzeba było napisać od razu, co chcesz osiągnąć i wkleić kod, który spłodziłeś.


--------------------
Go to the top of the page
+Quote Post
mati251195
post 19.12.2012, 16:39:17
Post #5





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 25.07.2012

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


Zastosowałem taką funkcję:
  1. function porownaj($x, $y) {
  2. if ($x[1] == $y[1]) return 0;
  3. else if ($x[1] < $y[1]) return -1;
  4. else return 1;
  5. }

i wszystko działa, ale w przypadku, gdy liczba według której jest sortowanie, czyli z tej drugiej kolumny w kilku przypadkach jest taka sama, powinno sortować według 1 kolumny. Mógłby ktoś przerobić ten kod, aby to zadziałało?
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 Wersja Lo-Fi Aktualny czas: 26.04.2025 - 01:54