Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie tablic
Forum PHP.pl > Forum > PHP
woli
Mam skrypt, który tworzy tabelę ligową piłki nożnej na podstawie meczy, które są zapisane w bazie danych MySQL.
Liczbę meczy wygranych, zremisowanych, przegranych i sumę punktów umieściłem w tablicy.
  1. <?php
  2. $tabela[] = array(
  3. nazwa => $dane[pelna_nazwa], 
  4. mecze => mecze($dane[id]), 
  5. wygrane => wygrane($dane[id]), 
  6. remisy => remisy($dane[id]), 
  7. porazki => porazki($dane[id]), 
  8. gz => gole_zdobyte($dane[id]), 
  9. gs => gole_stracone($dane[id]), 
  10. pkt => pkt($dane[id]),
  11. rg => roznica_goli($dane[id]), 
  12. );
  13. ?>

Aby uzyskać poszczególne wyniki użyłem napisanych przezemnie funkcji, które na podstawie id danej drużyny liczą odpowiednie wyniki na podstawie meczy zapisanych w bazie.
Tablice sortuję względem ilośći punktów (pkt) używając takiej funkcji
  1. <?php
  2. function sort_pkt($b, $a) {
  3. return strcmp(strtolower($a[pkt]), strtolower($b[pkt]));
  4. }
  5. ?>

I tworze całą tabelę ligową
  1. <?php
  2.  
  3. usort($tabela, "sort_pkt");
  4. print '<table><tbody>';
  5. $p = 1;
  6. while (list($klucz, $wartosc) = each($tabela)) {
  7. print '<tr>
  8. <td>'.$p.'.</td>
  9. <td>'.$wartosc[nazwa].'</td>
  10. <td>'.$wartosc[mecze].'</td>
  11. <td>'.$wartosc[wygrane].'</td>
  12. <td>'.$wartosc[remisy].'</td>
  13. <td>'.$wartosc[porazki].'</td>
  14. <td>'.$wartosc[gz].'</td>
  15. <td>-</td>
  16. <td>'.$wartosc[gs].'</td>
  17. <td>'.$wartosc[pkt].'</td>
  18. <td>'.$wartosc[rg].'</td>
  19.  </tr>';
  20. $p++;
  21. }
  22. print '</tbody></table>';
  23.  
  24. ?>


Otrzymuje coś takiego
Kod
1. Legia Warszawa     19   11   5   3   26 - 11    38    (+15)
2. Wisła Kraków       19   10   7   2   30 - 14    37    (+16)
3. Amica Wronki       19    9   5   5   33 - 18    32    (+15)
...

Wszystko ładnie posortowane malejąco względem ilości punktów.

Niestety, gdy któraś z drużyn ma ilość punktów poniżej 10, wtedy trafia na sam szczyt tabeli. W meczach granych u siebie tabela wygląda tak
Kod
1. Arka Gdynia            8   2   3   3   6 - 7     9    (-1)
2. Górnik Łęczna          8   1   4   3   4 - 8     7    (-4)
3. Polonia Warszawa       9   1   4   4   4 - 11    7    (-7)
4. Wisła Kraków           9   6   3   0   18 - 5   21    (+13)
5. Legia Warszawa         9   7   0   2   13 - 7   21    (+6)
6. Cracovia              10   6   2   2   17 - 10  20    (+7)
...
15. Korona Kielce         7   3   2   2   11 - 8   11    (+3)
16. GKS Bełchatów         9   2   4   3   9 - 11   10    (-2)

Czy ja popełniłem gdzieś błąd, czy ta funkcja sortująca tak działa?
wrzasq
albo jak chcesz w jakis specjalny sposob sortowac mozesz uzyc uasort().
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.