Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Tablica
Forum PHP.pl > Forum > Przedszkole
perhydrol
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"
robal94
nie wiem czy ci o to chodzi ale :
  1. echo donwload["kamil"]

itd
piotrooo89
  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.
fenix.robi
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




perhydrol
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
fenix.robi
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
piotrooo89
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? smile.gif
fenix.robi
Cytat(piotrooo89 @ 11.12.2009, 15:14:54 ) *
dzizas, jakie kombinowanie. nie lepiej parę elseif'ów i po sprawie?  smile.gif


biggrin.gif no moze to i kombinowanie 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 biggrin.gif


Ok nie róbmy offtopu biggrin.gif
perhydrol
to że jest kilka sposobów na rozwiązanie każdego problemu to nie nowość 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 tongue.gif
piotrooo89
możesz podać jakaś przykładową tablice na jakiej testujesz?
ShadowD
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. winksmiley.jpg
perhydrol
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
piotrooo89
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.
ShadowD
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.  
perhydrol
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 smile.gif
ShadowD
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. winksmiley.jpg
perhydrol
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 smile.gif
darko
array_merge
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.