Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Sumowanie elementow tabeli
Forum PHP.pl > Forum > Przedszkole
Rudixx
Witam. Skrypt polega na tym ze szczytuje on ze strony dane postaci (imie, poziom, profesje) i wyswietla je na stronie. Ja chce dodac kazdy poziom do siebie i obliczyc sredni poziom tych postaci. Do tej pory probowalem w ten sposob:

Kod
   foreach ( $players as $player )
    {
                $info = getPlayerStats($player, $list);
        if ( $info != FALSE )
        {
                   $poziom = $info["level"].'<br>';
          $zmienna = explode("<br>", $poziom);
                  echo array_sum($zmienna);

        }
    }


Ale echo zwraca mi $poziom$poziom$poziom$poziom

http://www.loj.home.pl/monarch/phpBB/viptool/module.vip.php
Andaramuxo
To tak, wyciągasz normalnie poziom każdego gracza, dodajesz je i funkcją SELECT COUNT wyciągasz, ile jest tych graczy, po czym dzielisz je przez to, co wyjdzie w COUNT.
Tu wyciąga od razu średnią z kolumny "poziom":
Kod
SELECT AVG(poziom) FROM uzytkownicy;
tmka
Tak na oko to wszystko wygląda ok. Sprawdź funkcją var_dump() zawartość zmiennej $poziom i $zmienna, być może w nich leży problem.
Rudixx
@Andaramuxo
Ty mowisz tutaj o mysql?

var_dump($zmienna)

rezultat: array(2) { [0]=> string(3) "194" [1]=> string(0) "" } array(2) { [0]=> string(3) "140" [1]=> string(0) "" } array(2) { [0]=> string(3) "137" [1]=> string(0) "" } array(2) { [0]=> string(3) "174" [1]=> string(0) "" } array(2) { [0]=> string(3) "146" [1]=> string(0) "" } array(2) { [0]=> string(3) "106" [1]=> string(0) "" } array(2) { [0]=> string(3) "110" [1]=> string(0) "" }


var_dump($poziom)

rezultat: string(7) "194
" string(7) "140
" string(7) "137
" string(7) "146
" string(7) "110
"

Napisalem teraz tak:
Kod
<?php
     if (count($online) != 0) {
        echo "<p class=\"online\">".count($online)." of ".count($players)." Enemies members online.</p>"; }
          else
          {
              echo "<p class=\"offline\">".count($online)." of ".count($players)." Enemies members online.</p>";
              }
              foreach ( $players as $player )
    {
                $info = getPlayerStats($player, $list);
        if ( $info != FALSE )
        {
                   $poziom = $info["level"].'<br>';
          $zmienna = explode("<br>", $poziom);
      
                  $suma = array_sum($zmienna);
                  echo 'Suma : '.$suma;

        }
    }

     ?>


I wychodzi mi:

Suma : 194Suma : 140Suma : 46Suma : 146Suma : 110
tmka
Mysle ze raczej chodzi o coś takiego:
  1. <?php
  2.     if (count($online) != 0) {
  3.        echo "<p class=\"online\">".count($online)." of ".count($players)." Enemies members online.</p>"; }
  4.          else
  5.          {
  6.              echo "<p class=\"offline\">".count($online)." of ".count($players)." Enemies members online.</p>";
  7.          }
  8.     $suma=0;//dla pewnosci ustaw na zero;
  9.     foreach ( $players as $player )
  10.     {
  11.        $info = getPlayerStats($player, $list);
  12.        if ( $info != FALSE )
  13.        {
  14.                 $poziom = $info["level"].'<br>';
  15.                 $zmienna = explode("<br>", $poziom);
  16.      
  17.                 $suma += intval($zmienna[0]);//jako ze $zmienna[0] jest stringiem bezpieczniej jest zrobic rzutowanie
  18.                 echo 'Suma : '.$suma;
  19.        }
  20.     }
  21.  
  22.     ?>
Rudixx
Zrobilem tak jak napisales i wyskakuje mi:

Suma : 140Suma : 186Suma : 386Suma : 496

Czyli pierwsze to jest level pierszej postaci drugi to jest level pierszej i drugiej z sumowany itd. Wsumie to gdyby dalo sie uzyskac tylko ten ostatni to juz by bylo wszystko, go tylko podzielic przez count($online) i wychodzi to co chcialem winksmiley.jpg
tmka
Aj, przeoczyłem pewną rzecz
  1. <?php
  2. if (count($online) != 0) {
  3.        echo "<p class=\"online\">".count($online)." of ".count($players)." Enemies members online.</p>"; }
  4.          else
  5.          {
  6.              echo "<p class=\"offline\">".count($online)." of ".count($players)." Enemies members online.</p>";
  7.          }
  8.     $suma=0;//dla pewnosci ustaw na zero;
  9.     foreach ( $players as $player )
  10.     {
  11.        $info = getPlayerStats($player, $list);
  12.        if ( $info != FALSE )
  13.        {
  14.                 $poziom = $info["level"].'<br>';
  15.                 $zmienna = explode("<br>", $poziom);
  16.      
  17.                 $suma += intval($zmienna[0]);//jako ze $zmienna[0] jest stringiem bezpieczniej jest zrobic rzutowanie
  18.                
  19.        }
  20.     }
  21.    echo 'Suma : '.$suma;//tutaj juz suma będzie wyświetlać sie prawidłowo
  22. ?>
Rudixx
No i dziekujemy, temat do zamkniecia.
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.