Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Tablica
perhydrol
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.12.2006

Ostrzeżenie: (0%)
-----


Witam,

nie wiem czemu ale nie mogę wymyślić żadnego sensownego rozwiązania, a już kiedyś mi się to udało tylko nie pamiętam jak:/

mam tablice:

  1. (
  2. [download] => Array
  3. (
  4. [Kamil] => 5kB/s
  5. [Marek] => 0kB/s
  6. [Jolka] => 13kB/s
  7. [Natalia] => 27kB/s
  8. [Tadeusz] => 15kB/s
  9. [suma] => 50kB/s
  10. )
  11. [upload] => Array
  12. (
  13. [Kamil] => 2kB/s
  14. [Marek] => 7kB/s
  15. [Jolka] => 15kB/s
  16. [Natalia] => 8kB/s
  17. [Tadeusz] => 3kB/s
  18. [suma] => 35kB/s
  19. )
  20. )


potrzebuje wynik w postaci :
  1. Name: Download Upload
  2. Kamil = 5kB/s 2kB/s
  3. Marek = 0kB/s 7kB/s
  4. Jolka = 13kB/s 15kB/s
  5. Natalia = 27kB/s 8kB/s
  6. Tadeusz = 15kB/s 3kB/s
  7. suma = 50kB/s


i jeszcze możliwość wystąpienia różnej ilości elementów tablic, czyli:
  1. (
  2. [download] => Array
  3. (
  4. [Kamil] => 5kB/s
  5. [Natalia] => 27kB/s
  6. [Tadeusz] => 15kB/s
  7. [suma] => 50kB/s
  8. )
  9. [upload] => Array
  10. (
  11. [Tadeusz] => 3kB/s
  12. [suma] => 3kB/s
  13. )
  14. )


Domyślam się że rozwiązanie będzie banalne....
"Gdy wszyscy wiedzą, że coś jest niemożliwe, przychodzi ktoś, kto o tym nie wie, i to robi"
Go to the top of the page
+Quote Post
robal94
post
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 2
Dołączył: 14.06.2009
Skąd: Czestochowa

Ostrzeżenie: (0%)
-----


nie wiem czy ci o to chodzi ale :
  1. echo donwload["kamil"]

itd
Go to the top of the page
+Quote Post
piotrooo89
post
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




  1. echo "Name\t Down\t Up";
  2. foreach ($tab[download] as $keyd => $valued)
  3. {
  4. foreach ($tab[upload] as $keyu => $valueu)
  5. {
  6. if ($keyd == $keyu)
  7. {
  8. echo "$keyd\t $valued\t $valueu";
  9. }
  10. else
  11. {
  12. //i teraz rozwarzasz różne przypadki, jeśli w jednej jest jesli nie ma w obu etc.
  13. }
  14. }
  15. }


coś takiego z palca.

Ten post edytował piotrooo89 11.12.2009, 14:50:37
Go to the top of the page
+Quote Post
fenix.robi
post
Post #4





Grupa: Zarejestrowani
Postów: 97
Pomógł: 7
Dołączył: 24.06.2008

Ostrzeżenie: (0%)
-----


Mysle ze tu pomoze foreach 

  1.  
  2. foreach ($tablica['download'] as $imie => $down_predkosc)
  3.  
  4. if(isset($tablica['upload'][$imie]))
  5.  
  6.       $upload_przedkosc = $tablica['upload'][$imie];
  7.  
  8. else
  9.  
  10.       $upload_przedkosc = 'Nie ma';
  11.  
  12. echo $imie.' - '.$down_predkosc.' - '.  $upload_przedkosc;
  13.  


ale dobrze jakbyś miał liste wszystkich użytkowników bo moze byc ze upload bedzie wiekszy niż download, wtedy byś tylko zmienił parametry foreach, a download bys robił tak jak upload




Go to the top of the page
+Quote Post
perhydrol
post
Post #5





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.12.2006

Ostrzeżenie: (0%)
-----


heheh śmieszne jest to że próbowałem podobnie z dwoma foreach-ami jak Ty "piotrooo89"
ale coś nie śmigało jak trzeba

tylko jeszcze co w sytuacji jak będzie coś takiego:

  1. (
  2. [download] => Array
  3. (
  4. [Tadeusz] => 3kB/s
  5. [suma] => 3kB/s
  6. )
  7. [upload] => Array
  8. (
  9. [Kamil] => 5kB/s
  10. [Natalia] => 27kB/s
  11. [Tadeusz] => 15kB/s
  12. [suma] => 50kB/s
  13. )
  14. )



oczywiście zależy mi na wyniku:
  1. Kamil = 0kB/s 5kB/s
  2. Natalia = 0kB/s 27kB/s
  3. Tadeusz = 3kB/s 15kB/s
  4. suma = 3kB/s 50kB/s


Ten post edytował perhydrol 11.12.2009, 15:10:14
Go to the top of the page
+Quote Post
fenix.robi
post
Post #6





Grupa: Zarejestrowani
Postów: 97
Pomógł: 7
Dołączył: 24.06.2008

Ostrzeżenie: (0%)
-----


Czyli to co napisałem pod moimi wypocinami, spróbuj najpierw funkcją array_merge z połaczeniem array_keys download i upload i bedziesz mial wszystkie imiona i sumy wystepujące w obywdu tablicach i potem foreachem traktujesz tą tablice którą masz na wyjściu array_merge,  i sprawdzasz issetem czy istnieje dane imie w downlad i upload
Go to the top of the page
+Quote Post
piotrooo89
post
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




to popatrz sobie na mój komentarz w listningu. masz tam opisane jak to zrobić, pokombinuj samemu i pokaż ewentualnie coś poprawimy doradzimy.


//EDIT
Cytat
Czyli to co napisałem pod moimi wypocinami, spróbuj najpierw funkcją array_merge z połaczeniem array_keys download i upload i bedziesz mial wszystkie imiona i sumy wystepujące w obywdu tablicach i potem foreachem traktujesz tą tablice którą masz na wyjściu array_merge, i sprawdzasz issetem czy istnieje dane imie w downlad i upload


dzizas, jakie kombinowanie. nie lepiej parę elseif'ów i po sprawie? (IMG:style_emoticons/default/smile.gif)

Ten post edytował piotrooo89 11.12.2009, 15:16:06
Go to the top of the page
+Quote Post
fenix.robi
post
Post #8





Grupa: Zarejestrowani
Postów: 97
Pomógł: 7
Dołączył: 24.06.2008

Ostrzeżenie: (0%)
-----


Cytat(piotrooo89 @ 11.12.2009, 15:14:54 ) *
dzizas, jakie kombinowanie. nie lepiej parę elseif'ów i po sprawie?  (IMG:style_emoticons/default/smile.gif)


(IMG:style_emoticons/default/biggrin.gif) no moze to i kombinowanie (IMG:style_emoticons/default/biggrin.gif) bo przykład nie jest jakis tam wygórowany, lecz jak kolega się uczy, no to ma już alternatywę, jak sobie te dwa przykłady przećwiczy, a nóż się przyda w innym przypadku, lub jak ten się rozwinie (IMG:style_emoticons/default/biggrin.gif)


Ok nie róbmy offtopu (IMG:style_emoticons/default/biggrin.gif)

Ten post edytował fenix.robi 11.12.2009, 15:24:13
Go to the top of the page
+Quote Post
perhydrol
post
Post #9





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.12.2006

Ostrzeżenie: (0%)
-----


to że jest kilka sposobów na rozwiązanie każdego problemu to nie nowość (IMG:style_emoticons/default/exclamation.gif)

Wiec wybrałem rozwiązanie łatwiejsze, tyle że po dopisaniu warunków w tym rozwiązaniu z dwoma foreach-ami, znalazłem się dokładnie w tym samym momencie zanim napisałem tego posta.
Widzę więc że mój problem polega na postawieniu odpowiednich warunków, nic więcej....

Więc przyznam szczerze że myślałem nad rozwiązaniem przez utworzenie nowej tablicy, z przypisanymi wartościami

tj.
  1. Trafic
  2. (
  3. Ewelina =>
  4. download = 10
  5. upload =2
  6.  
  7. Tadeusz =>
  8. download = 0
  9. upload =5
  10.  
  11. )

itp

no ale proponujecie trochę inne rozwiązanie więc próbuje z tymi warunkami ale chyba dobrze by było jak byście mnie trochę naprowadzili, i nie zapewniam że nie musi to być gotowy kod....

ja próbuję coś takiego, no ale :/
  1. echo "<pre>";
  2. echo "Name\t\t Down\t\t Up<br>";
  3. foreach ($tTrafic[download] as $keyd => $valued)
  4. {
  5. foreach ($tTrafic[upload] as $keyu => $valueu)
  6. {
  7. if ($keyd == $keyu)
  8. echo "$keyd\t\t $valued\t\t $valueu<br>";
  9. elseif($keyd !== $keyu && isset($keyu) && !isset($keyd))
  10. {
  11. echo "$keyd\t\t $valued\t\t U<br>";
  12. }
  13. elseif($keyd !== $keyu && !isset($keyu) && isset($keyd))
  14. {
  15. echo "$keyd\t\t D\t\t $valueu<br>";
  16. }
  17. }
  18. }
  19. echo "</pre>";


-wiem, patrzę na te "elseif" i są kompletnie bezsensowne (IMG:style_emoticons/default/tongue.gif)

Ten post edytował perhydrol 11.12.2009, 16:04:13
Go to the top of the page
+Quote Post
piotrooo89
post
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




możesz podać jakaś przykładową tablice na jakiej testujesz?
Go to the top of the page
+Quote Post
ShadowD
post
Post #11





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


A nie lepiej wykorzystać dwie oddzielne pętle i w jednej tworzyć zmienne tymczasowe które oznaczały by już wykonane echo, a w drugiej echować tylko te elementy których w owej tymczasowej zmiennej nie ma?

  1.  
  2. $download=array('SahdowD'=>22, 'perhydrol'=>88, 'nieMamUploadu'=>33);
  3. $upload=array('SahdowD'=>11, 'perhydrol'=>99, 'nieMamDownloadu'=>33);
  4.  
  5. foreach($download as $name=>$value)
  6. {
  7. $echo[$name]=FALSE;
  8.  
  9. if(xxx)
  10. echo $name.': '.$download[$name].' - '.$upload[$name].'<br />';
  11. else
  12. echo $name.': '.$download[$name].' - 0 <br />';
  13. }
  14.  
  15. foreach($upload as $name=>$value)
  16. {
  17. if($echo[$name]!==FALSE)
  18. if(xxx)
  19. echo $name.': '.$download[$name].' - '.$upload[$name].'<br />';
  20. else
  21. echo $name.': 0 - '.$upload[$name].' <br />';
  22. }
  23.  


xxx - by nie było, że daje gotowca jak się przyłożysz następnym razem z tym problemem nie przyjdziesz. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
perhydrol
post
Post #12





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.12.2006

Ostrzeżenie: (0%)
-----


oczywiście że mogę podać,

dodam jeszcze że generuje się ona co 1 sekundę, więc jej zawartość a także ilość rekordów !

link:

Przykładowa tablica
Go to the top of the page
+Quote Post
piotrooo89
post
Post #13


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




hmm tak się zastanawiam czy nie wydajniej by było gdybyś łączył 2 dane z tych dwóch tablic w jedną. bo takie porównywanie może być średnio optymalne.
Go to the top of the page
+Quote Post
ShadowD
post
Post #14





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


nie wiem czy było to do mnie - mam taką nadzieję, funkcji do łączenia nie znam (o ile istnieje zaraz poznam). Tymczasem kod jw. tylko na zmiennych:

  1.  
  2. foreach($download as $name=>$value)
  3. {
  4. if(xxx)
  5. {
  6. $transfer[$name]['download']=$download[$name];
  7. $transfer[$name]['upload']=$upload[$name];
  8. }
  9. else
  10. {
  11. $transfer[$name]['download']=$download[$name];
  12. $transfer[$name]['upload']=0;
  13. }
  14. }
  15.  
  16. foreach($upload as $name=>$value)
  17. {
  18. if(empty($transfer[$name]))
  19. if(xxx)
  20. {
  21. $transfer[$name]['download']=$download[$name];
  22. $transfer[$name]['upload']=$upload[$name];
  23. }
  24. else
  25. {
  26. $transfer[$name]['download']=0;
  27. $transfer[$name]['upload']=$upload[$name];
  28. }
  29. }
  30.  
Go to the top of the page
+Quote Post
perhydrol
post
Post #15





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.12.2006

Ostrzeżenie: (0%)
-----


oczywiście ShadowD rozwiązanie bezbłędnie działające, no ale przyznam szczerze że ciekaw jestem czy może być bardziej optymalnie (z tym łączeniem tablic)
czy mowa tu o rozwiązaniu o jakim wcześniej mówiłem? ? ?
tj
  1. Trafic
  2. (
  3. Ewelina =>
  4. download = 10
  5. upload =2
  6.  
  7. Tadeusz =>
  8. download = 0
  9. upload =5
  10.  
  11. )


oczywiście dziękuje wszystkim za pomoc i zainteresowanie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
ShadowD
post
Post #16





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

Ostrzeżenie: (0%)
-----


Nie za bardzo rozumiem o co chodzi, kod który dodałem jako ostatni łączy tablice...

Nie wiem, ale być może istnieje jakaś gotowa funkcji, ale jeszcze jej nie znam. (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
perhydrol
post
Post #17





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 11.12.2006

Ostrzeżenie: (0%)
-----


Mój błąd (z tym warunkiem)

dopiero teraz zwróciłem uwagę że nie pokrywają się wyniki prezentowane od tych które znajdują się aktualnie w tablicach "download" i "upload"

tu kod:
  1. foreach($tTrafic[download] as $name=>$value)
  2. {
  3. $echo[$name]=FALSE;
  4.  
  5. if($tTrafic['download'][$name] == $tTrafic['upload'][$name])
  6. echo $name.':<b style="color:red;"> '."\t\t".$tTrafic['download'][$name].' - '.$tTrafic['upload'][$name].'<br /></b>';
  7. else
  8. echo $name.': '."\t\t".$tTrafic['download'][$name].' - 0 <br />';
  9. }
  10.  
  11. foreach($tTrafic['upload'] as $name=>$value)
  12. {
  13. if($echo[$name]!==FALSE)
  14. if($tTrafic['download'][$name] == $tTrafic['upload'][$name])
  15. echo $name.': '."\t\t".$tTrafic['download'][$name].' - '.$tTrafic['upload'][$name].'<br />';
  16. else
  17. echo $name."\t\t".': 0 - '.$tTrafic['upload'][$name].' <br />';
  18. }


a tu strona prezentująca aktualne wyniki, to co na czerwono jak widać nie pokrywa się z rzeczywistością :/
>>>Strona Statystyk, wynik działania<<

Sorry pośpieszyłem się, no i jeszcze raz dziękuję wszystkim za pomoc (IMG:style_emoticons/default/smile.gif)

Ten post edytował perhydrol 11.12.2009, 17:48:09
Go to the top of the page
+Quote Post
darko
post
Post #18





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


array_merge
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 10:04