Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sumowanie/Wyliczanie średniej
kamioool
post 24.02.2014, 13:28:10
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 1.01.2008

Ostrzeżenie: (10%)
X----


A więc od przez pare ostatnich dni walcze z jednym skryptem ktory ma za zadanie - z logow gry - wplat do klanu - wyliczyć srednią dla każdego wpłacającego.

Dane otrzymuje w takiej postaci:

Cytat
[2014-02-15 17:21:52] Tomek123 742 521 250 zł
[2014-02-15 10:37:34] Kamil 200 000 000 zł
[2014-02-14 20:03:58] Janek12 200 000 000 zł
[2014-02-14 16:20:16] Bartek 237 606 800 zł
[2014-02-14 16:19:36] Kamil 200 000 000 zł
[2014-02-14 10:31:36] Don Vito 000 000 zł
[2014-02-14 08:31:07] Don Vito 623 717 850 zł
[2014-02-11 13:30:53] Bartek 1 379 187 686 zł


Po długiej walce udało stworzyć mi sie taki kod: efekt można zobaczyc na stronie "http://lobots.no-ip.pl/"

  1. <?php
  2.  
  3. if (isset ($_POST['form'])) {
  4. $textInput = $_POST['form'];
  5. $array = explode("\n", $textInput);
  6. $i = 0;
  7.  
  8.  
  9. foreach ($array as $v) {
  10. $elementy = explode(" ", $v);
  11. $i++;
  12. $tmpcount = count($elementy);
  13. $temp_nick = '';
  14. $temp_kwota = '';
  15. for ($i = 2; $i < $tmpcount; $i++) {
  16.  
  17.  
  18. if (trim($elementy[$i]) !== "zł" ) {
  19. if(is_numeric( $elementy[$i]) && (strlen($elementy[$i]) <= 3) ) {
  20. $temp_kwota .= $elementy[$i].'';
  21. }
  22. else {
  23. $temp_nick .= $elementy[$i].' ';
  24. }
  25. }
  26. }
  27. echo $temp_nick, $temp_kwota ." <BR />";
  28. }
  29.  
  30. echo "<br> Załadowano " . count($array) . " rekordów";
  31. }
  32.  
  33.  
  34. ?>


Po wklejeniu wcześniej podanych danych otrzymuje taki efekt:
Cytat
Tomek123 742521250
Kamil 200000000
Janek12 200000000
Bartek 237606800
Kamil 200000000
Don Vito 000000
Don Vito 623717850
Bartek 1379187686

Załadowano 9 rekordów


Chciał bym podać końcowe zestawienie tzn. zsumować wpłaty dla wszystkich ktorych imiona sie powtarzają. Nie za bardzo wiem w jaki sposob przechowywac dane aby moc na nich pozniej spokojnie operować. Jako że jestem troszke oporny w szybkim przyswajaniu nowej wiedzy proszę o przykłady.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
nospor
post 24.02.2014, 13:42:46
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Dane zapisuj do tablicy


Na samym poczatku kodu daj:
$users = array();

Zas zamiast tego
echo $temp_nick, $temp_kwota ." <BR />";
dodaj kod
  1. if (!isset($users[$temp_nick])) {
  2. $users[$temp_nick] = array();
  3. }
  4. $users[$temp_nick][] = $temp_kwota;

Ten kod stworzy ci tablice.

Zrob sobie
print_r($users);
na koncu a zobaczysz jak wyglada ta tablica. Mozesz wowczas bez problemu sumowac czy co tam ci sie zywnie podoba


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamioool
post 24.02.2014, 13:56:06
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 1.01.2008

Ostrzeżenie: (10%)
X----


Rozumiem stworzyłeś tu tablice wielowymiarową z indeksem jako nazwa uzytkownika.

Czy może prościej było by zapisywać informacje do bazy danych. Chcial bym upublicznic skrypt jednak boje sie że korzystanie z mysql bez odpowiedniej walidacji danych moze narazic mnie na niebezpieczenstwo.
Go to the top of the page
+Quote Post
nospor
post 24.02.2014, 13:59:06
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A po co zapisywac ci to do bazy, skoro chcesz wyliczac dane na biezącą?
No chyba ze zamierzasz trzymac te dane na dluzej, to tak, mozesz pisac do bazy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamioool
post 24.02.2014, 14:56:55
Post #5





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 1.01.2008

Ostrzeżenie: (10%)
X----


Cytat(nospor @ 24.02.2014, 13:59:06 ) *
A po co zapisywac ci to do bazy, skoro chcesz wyliczac dane na biezącą?
No chyba ze zamierzasz trzymac te dane na dluzej, to tak, mozesz pisac do bazy.


Jednak sie na tym klade - tablice wielowymiarowe to zbyt szybko dla mnie ;/
Mogł byś jeszcze pomóć w jaki sposob zsumować te dane? i wyświetlic "$nick wpłacił $suma"

Nie wiem w jaki sposob odnieść sie masowo do tych tablic skoro indeksem nie moze byc $i++ ;/
Go to the top of the page
+Quote Post
nospor
post 24.02.2014, 15:04:34
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Nie wiem w jaki sposob odnieść sie masowo do tych tablic skoro indeksem nie moze byc $i++ ;/
Do latania po tablicach uzywa sie FOREACH - wowczas zadne $i ci niepotrzebne


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamioool
post 24.02.2014, 16:08:20
Post #7





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 1.01.2008

Ostrzeżenie: (10%)
X----


Cytat(nospor @ 24.02.2014, 15:04:34 ) *
Do latania po tablicach uzywa sie FOREACH - wowczas zadne $i ci niepotrzebne


Czyli dla tablicy dwuwymiarowej musze uzyc petli foreach w petli foreach? snitch.gif
Go to the top of the page
+Quote Post
nospor
post 24.02.2014, 16:10:35
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ogolnie tak.
Ale w tym wypadku wystarczy tylko jedno FOREACH by przeleciec po nickach, a potem to juz tylko array_sum itp.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamioool
post 24.02.2014, 16:30:12
Post #9





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 1.01.2008

Ostrzeżenie: (10%)
X----


A aby posortować po sumie wpłat? Prawdopodobnie musiał bym utworzyc kolejna tablice gdzie zapisywał bym juz zsumowane wpłaty i wtedy sortowanie było by proste
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:24