Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z posortowanie tablicy
Mlodycompany
post 18.06.2010, 15:57:51
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witajcie. Otóż chcę posortować pewną tablice najpierw po ilości punktów malejąco, a potem po bilansie też malejąco.
Kod
Array
(
    [1] => Array
        (
            [punkty] => 6
            [bilans] => 26
            [wygrane] => 2
            [mecze] => 6
            [przegrane] => 4
        )

    [2] => Array
        (
            [punkty] => 6
            [bilans] => -28
            [wygrane] => 2
            [mecze] => 4
            [remisy] => 1
            [przegrane] => 1
        )

    [23] => Array
        (
            [punkty] => 3
            [bilans] => -18
            [przegrane] => 2
            [mecze] => 4
            [wygrane] => 1
            [remisy] => 1
        )

    [24] => Array
        (
            [punkty] => 5
            [bilans] => 20
            [wygrane] => 2
            [mecze] => 2
        )

)

Zacząłem kąbinować z funkcja
ale średnio coś to mi wychodziło. Czy moglibyście mi pomóc?
Go to the top of the page
+Quote Post
jasin
post 18.06.2010, 19:09:24
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


Ja proponowałbym użycie funkcji usort dla której można samemu napisać funkcję porównującą.

np.:
  1. function cmp($a, $b)
  2. {
  3. if($a['punkty'] == $b['punkty'])
  4. {
  5. if($a['bilans'] == $b['bilans'])
  6. {
  7. return 0;
  8. }
  9.  
  10. return ($a['bilans'] > $b['bilans']) ? -1 : 1;
  11. }
  12.  
  13. return ($a['punkty'] > $b['punkty']) ? -1 : 1;
  14. }
  15.  
  16. $tab[0]['punkty'] = 6;
  17. $tab[0]['bilans'] = 26;
  18. $tab[1]['punkty'] = 6;
  19. $tab[1]['bilans'] = -28;
  20. $tab[2]['punkty'] = 3;
  21. $tab[2]['bilans'] = -18;
  22. $tab[3]['punkty'] = 5;
  23. $tab[3]['bilans'] = 20;
  24. $tab[4]['punkty'] = 6;
  25. $tab[4]['bilans'] = 12;
  26.  
  27. echo '<pre>';
  28. print_r($tab);
  29. usort($tab, "cmp");
  30. print_r($tab);
  31. echo '</pre>';


Ten post edytował jasin 18.06.2010, 19:21:32


--------------------
Go to the top of the page
+Quote Post
Mlodycompany
post 18.06.2010, 20:00:42
Post #3





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


dzięki. samo w sobie działa ale powiedz mi jeszcze jak to w klase wgrać. uasort($tablica, "nazwa_funkcji") co wpisać zamiast nazwy funkcji gdy mam ta funkcje w tej samej klasie albo jak to inaczej rozegrać?

I jeszcze jeden problem ponieważ w tablicy w kluczu było id drużyny i po sortowaniu wszystkie id zostały zastąpione kolejnymi liczbami od 0. Da sie tego jakoś uniknąc?
Go to the top of the page
+Quote Post
jasin
post 19.06.2010, 09:23:17
Post #4





Grupa: Zarejestrowani
Postów: 142
Pomógł: 32
Dołączył: 21.08.2008
Skąd: Toruń

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


Używając wewnątrz klasy:
  1. usort($this->arr, array($this, 'cmp'));

lub
  1. usort($array, array('className', 'cmp'));


A id proponowałbym wrzucić jako kolejne pole w tej tablicy ponieważ usort reindexuje od nowa tablicę.


--------------------
Go to the top of the page
+Quote Post
bastard13
post 19.06.2010, 09:33:04
Post #5





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Zamień usort() na uksort(), to będzie bez zmiany indeksów, a resztę według rad jasina.


--------------------
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: 11.06.2024 - 01:25