Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z posortowanie tablicy
Forum PHP.pl > Forum > Przedszkole
Mlodycompany
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?
jasin
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>';
Mlodycompany
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?
jasin
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ę.
bastard13
Zamień usort() na uksort(), to będzie bez zmiany indeksów, a resztę według rad jasina.
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.