Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Średnia ważona
Forum PHP.pl > Forum > PHP
Ikky
mam taką tablice:

  1. $artykuly = array(
  2. 'kategoria1' => array(
  3. 'kategoria_nazwa' => 'kategoria1',
  4. 'artykuly' => array(
  5. 'artykul_nazwa' => 'art1',
  6. 'artykul_ocena' => '5',
  7. 'artykul_waga' => '2'
  8. ),
  9. 'praca_nazwa' => 'art2',
  10. 'artykul_ocena' => '4',
  11. 'artykul_waga' => '3'
  12. )
  13. )
  14. ),
  15. 'kategoria2' => array(
  16. 'kategoria_nazwa' => 'kategoria2',
  17. 'artykuly' => array(
  18. 'artykul_nazwa' => 'art3',
  19. 'artykul_ocena' => '5',
  20. 'artykul_waga' => '4'
  21. )
  22. )
  23. ),
  24. 'kategoria3' => array(
  25. 'kategoria_nazwa' => 'kategoria3',
  26. 'artykuly' => array(
  27. 'artykul_nazwa' => 'art4',
  28. 'artykul_ocena' => '1',
  29. 'artykul_waga' => '3'
  30. )
  31. )
  32. )
  33. );
  34.  


chce obliżyć średnią ocen artykułów dla każdej kategorii

czyli ma to działać tak: artykul1_ocena*artykul1_waga + artykul2_ocena*artykul2_waga ..... / artykul1_waga + artykul2_waga
tylko nie moge przewidziec ile bedzie artykulow :/
jakies pomysly ? jak sie za cos takiego zabrac?

marcinpruciak
O pętlach słyszał?
_Martin_
Ja bym wpętli przetworzył tablice wyciągnał sume ocen i podzielił przez ilosć ocen i gotowe smile.gif
thek
  1. $wyniki = array()
  2. foreach ($artykuly AS $kategoria) {
  3. foreach ($kategoria AS $dane) {
  4. $suma = 0;
  5. $waga = 0;
  6. foreach($dane AS $artykul) {
  7. $suma += $artykul['artykul_ocena'] * $artykul['artykul_waga'];
  8. $waga += $artykul['artykul_waga'];
  9. }
  10. $wyniki[ $dane['kategoria_nazwa'] ] =$suma/$waga;
  11. }
  12. }

Mniej więcej coś takiego.
a) Przelatujesz po każdej kategorii,
cool.gif W każdej kategorii czyścisz zmienną suma i waga,
c) Pobierasz nazwę kategorii,
d) Robisz pętlę po wszystkich artykułach i dodajesz w tej pętli zarówno iloczyny jak i wagi,
e) Tworzysz klucz w tablicy wyników z nazwą kategorii i jako wartość ustawiasz średnią.

Tak mniej więcej wygląda algorytm i na szybko napisany kod. Zaznaczam, że piszę z głowy i nie testowałem go, więc może gdzieś byk wyskoczyć smile.gif
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.