Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z sortowaniem tablicy wielowymiarowej
Forum PHP.pl > Forum > PHP
koszal
Mam problem z posortowaniem tablicy wielowymiarowej zawierającej dane z tabeli ligowej ;/

Oto pełny kod skryptu:
  1. <?
  2. $connection = mysql_connect('localhost', 'root', '');
  3. mysql_select_db('turniej');
  4.  
  5. // pobranie danych wszystkich graczy
  6. $result = mysql_query("SELECT * FROM players");
  7. // rozpoczecie petli kompletujacej dane zawodnikow
  8. while ($row = mysql_fetch_assoc($result))
  9. {
  10. // ustawienie zmiennej zawierajacej imie gracza
  11. $name = $row['player_name'];
  12.  
  13. // obliczenie za pomoca petli liczby zwyciestw, remisow, porazek, goli zdobytych i
     ztraconych na wlasnym boisku
  14. $h_result = mysql_query("SELECT * FROM matches WHERE home='".$row['player_id']."'");
  15. while ($home = mysql_fetch_assoc($h_result))
  16. {
  17. if ($home['home_goals'] > $home['away_goals'])
  18. {
  19. $wins += 1;
  20. }
  21.  
  22. if ($home['home_goals'] == $home['away_goals'])
  23. {
  24. $ties += 1;
  25. }
  26.  
  27. if ($home['home_goals'] < $home['away_goals'])
  28. {
  29. $loses += 1;
  30. }
  31.  
  32. $goals_in += $home['home_goals'];
  33. $goals_out += $home['away_goals'];
  34. }
  35.  
  36. // obliczenie za pomoca petli liczby zwyciestw, remisow, porazek, goli zdobytych i
     ztraconych na boisku przeciwnika
  37. $a_result = mysql_query("SELECT * FROM matches WHERE away='".$row['player_id']."'");
  38. while ($away = mysql_fetch_assoc($a_result))
  39. {
  40. if ($away['home_goals'] < $away['away_goals'])
  41. {
  42. $wins += 1;
  43. }
  44.  
  45. if ($away['home_goals'] == $away['away_goals'])
  46. {
  47. $ties += 1;
  48. }
  49.  
  50. if ($away['home_goals'] > $away['away_goals'])
  51. {
  52. $loses += 1;
  53. }
  54.  
  55. $goals_out += $home['home_goals'];
  56. $goals_in += $home['away_goals'];
  57. }
  58.  
  59. // podliczenie punktow i bilansu bramkowego
  60. $goals = $goals_in - $goals_out;
  61. $points = 3 * $wins + $ties;
  62.  
  63.  
  64. // zebranie danych do kupy w wielowymiarowej tablicy
  65. $player[] = array(
  66. 'name' => $name,
  67. 'points' => $points,
  68. 'wins' => $wins,
  69. 'ties' => $ties,
  70. 'loses' => $loses,
  71. 'goals' => $goals,
  72. 'goals_in' => $goals_in,
  73. 'goals_out' => $goals_out
  74. );
  75.  
  76. // wyzerowanie zmiennych przed obliczeniem danych nastepnego gracza
  77. $points = 0;
  78. $wins = 0;
  79. $ties = 0;
  80. $loses = 0;
  81. $goals = 0;
  82. $goals_in = 0;
  83. $goals_out = 0;
  84. }
  85.  
  86.  
  87. // i tu zaczyna sie problem, poniawaz pojawia sie blad, i funkcja sortujaca otrzym
    uje niewlasciwe dane 
  88. foreach ($player as $klucz => $wiersz) {
  89. $points[$klucz] = $wiersz['points'];
  90. $goals[$klucz] = $wiersz['goals'];
  91. $goals_in[$klucz] = $wiersz['goals_in'];
  92. }
  93.  
  94. array_multisort($points, SORT_DESC, $goals, SORT_DESC, $goals_in, SORT_DESC, $player);
  95.  
  96.  
  97.  
  98.  
  99. ?>
  100. <pre>
  101. <?
  102. print_r($player);
  103. ?>
  104. </pre>


Oto jego wynik:
Kod
Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 89

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 90

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 91

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 89

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 90

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 91

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 89

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 90

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 91

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 89

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 90

Warning: Cannot use a scalar value as an array in D:\PHP\tabelka\test3.php on line 91

Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or sorting flag that has not already been specified in D:\PHP\tabelka\test3.php on line 94

Array
(
    [0] => Array
        (
            [name] => andrzej
            [points] => 3
            [wins] => 1
            [ties] =>
            [loses] => 2
            [goals] => -1
            [goals_in] => 5
            [goals_out] => 6
        )

    [1] => Array
        (
            [name] => wojtek
            [points] => 1
            [wins] => 0
            [ties] => 1
            [loses] => 2
            [goals] => -2
            [goals_in] => 1
            [goals_out] => 3
        )

    [2] => Array
        (
            [name] => zbigniew
            [points] => 7
            [wins] => 2
            [ties] => 1
            [loses] => 0
            [goals] => 2
            [goals_in] => 3
            [goals_out] => 1
        )

    [3] => Array
        (
            [name] => romek
            [points] => 6
            [wins] => 2
            [ties] => 0
            [loses] => 1
            [goals] => 0
            [goals_in] => 0
            [goals_out] => 0
        )

)


Jak widać, tablica nie sortuje sie, a w dodatku wyskakuja jakies błedy ;/

Czy wie moze ktos, co tu jest nie tak? Byłbym wdzieczny za pomoc winksmiley.jpg

Wiem, ze zamiast array_multisort() mozna uzyc usort() i napisac wlasną funkcje sortującą, ale kompletnie nie wiem jak sie do tego zabrac. Mógłby ktos podesłac jakis link lub sypnąc obszernym przykladem? Pozdrawiam
Kicok
Zmienne: $points, $goals oraz $goals_in przechowują dane liczbowe, ale w liniach 89-91 odwołujesz się do nich jak do tablic (stosujesz kwadratowe nawiasy). Musisz przed pętlą foreach jawnie ustawić typ danych tym zmiennym:
  1. <?php
  2.  
  3. $points = array();
  4. // ...
  5.  
  6. ?>
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.