Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]sumowanie na ... tablicach :)
Forum PHP.pl > Forum > Przedszkole
Edyta
mam 3 tablice (zawierajace nazwę, i ilosc wystapien) o strukturze:

$tab1
[krzeszło][5]
[stół][9]
[okno][21]
[ołówek][2]

$tab2
[dom][1]
[okno][23]
[stół][5]
[lampa][7]

$tab3
[lampa][11]
[okno][2]
[ołówek][1]
[lampa][8]

i terach chce stworzyć nową jedną tablice
zawierająca liste przedmiotów i sumę tych przedmiotów. Tak by w nowej tablicy były tylko unikalne nazwy. Np.

[lampa][15]
[stół][14]
ayeo
Witaj!
Bardzo prostu w sumie smile.gif Musisz skorzystać z funkcji array_key_exists(); i jeżeli w Twojej tablicy nie ma jeszcze takiego klucza to go tworzy, a jak jest to dodaje do wartości stosowną wartość.
Pozdrawiam!
Edyta
czyli jak ? z warunkiem if ?

czytałam o funkcji array_merge_recursive() - ale coś niebardzo mi wychodzi ... a z opisu niby powinno to byc to
ayeo
array_merge() nadpisze Ci klucz nową wartościa (tak mi się wydaje).
Robisz coś takiego:
  1. <?php
  2. $t1, $t2, $t3 = array(jakies dane);
  3.  
  4. //łączymy tylko $t1 i $t2, docelowo powinno to być w pętli
  5. $results = array(); // nasza tablica wynikowa
  6. foreach($t1 as $key => $value)
  7. {
  8.  $results[$key] = $results[$key] + $value;
  9. }
  10. ?>


W sumie chyba można i tak nawet smile.gif
pewnie będzie notice o undefinied index, ale działać powinno dobrze winksmiley.jpg

Pozdrawiam
Edyta
  1. <?php
  2. for( $i=1; $i<=6; $i++ )
  3. {
  4. $tagi = array();
  5.  
  6. foreach( $tag[$i] as $klucz => $wartosc )
  7. {
  8. $tagi[$klucz] = $results[$klucz] + $wartosc;
  9. }
  10. }
  11. ?>


i dostaje error

Kod
Fatal error: Unsupported operand types in ... test.php on line 45
lled3
a nie da tegosie jedna funkcja? chyba jakas byla ...
neverever
jedną funkcją nie da rady.

Można i tak
  1. <?php
  2.  
  3. //2 tablice testowe
  4. $tab1=array(); //tutaj definicja tablicy1
  5. $tab2=array(); //tutaj definicja tablicy2
  6.  
  7. $wynik=array(); //tablica wynikowa
  8.  
  9. //łączenie tablic
  10. $razem=array_merge_recursive($tab1, $tab2);
  11. //print_r($wynik);
  12.  
  13. foreach ($razem as $key => $value) {
  14. $wynik[$key]=array_sum($value); //sumowanie wartości do tablicy wynikowej
  15. }
  16.  
  17. print_r($wynik);
  18. ?>
lled3
tylko to sumowanie pokazuje totalne bzdury ... ono chyba sumuje indexy sciana.gif
neverever
Cytat(lled3 @ 3.08.2008, 14:21:36 ) *
tylko to sumowanie pokazuje totalne bzdury ... ono chyba sumuje indexy sciana.gif

W kodzie faktycznie był drobny błąd - nie sprawdzało czy wartość jest tablicą czy nie.
Tu masz poprawiony kod z przykładowymi danymi:
  1. <?php
  2.  
  3. //2 tablice testowe
  4. $tab1=array(); $tab1['a']=3; $tab1['b']=1; $tab1['c']=5; $tab1['d']=8; //tablica1
  5. $tab2=array(); $tab2['a']=3; $tab2['b']=2; $tab2['c']=1; //tablica2
  6.  
  7. $wynik=array(); //tablica wynikowa
  8.  
  9. //łączenie tablic
  10. $razem=array_merge_recursive($tab1, $tab2);
  11. //print_r($razem);
  12.  
  13. foreach ($razem as $key => $value) {
  14. if(!is_array($value)){ //spr. czy wartość to tablica, jeśli nie to przepisuje
  15. $wynik[$key]=$value; 
  16. }
  17. else {
  18. $wynik[$key]=array_sum($value); //jeśli tak sumowanie wartości do tablicy wynikowej
  19. }
  20. }
  21.  
  22. print_r($wynik);
  23. ?>
lled3
zrobiłem to tak smile.gif

  1. <?php
  2. //składanie 6 tablic w 1
  3. for( $i=1; $i<=6; $i++ )
  4. {
  5. $wynik = array_merge_recursive( $wynik, $tag[$i] );
  6. }
  7.  
  8. $ia=0;
  9. for( $i=0; $i<count( $wynik ); $i++ )
  10. {
  11. echo $wynik[$i]['tag'].'|'.$wynik[$i]['ile'].'<br />';
  12.  
  13. if( @in_array( $wynik[$i]['tag'], $nowa['tag'] ) )
  14. {
  15. $in = array_search( $wynik[$i]['tag'], $nowa['tag'] );
  16. $nowa['ile'][$in] += $wynik[$i]['ile'];
  17. }
  18. else
  19. {
  20. $nowa['tag'][$ia] = $wynik[$i]['tag'];
  21. $nowa['ile'][$ia] = $wynik[$i]['ile'];
  22. $ia++;
  23. }
  24. }
  25.  
  26. for( $ib=0; $ib<count( $nowa['ile'] ); $ib++ )
  27. {
  28. echo $nowa['tag'][$ib].$nowa['ile'][$ib].'<br />';
  29. }
  30. ?>


i pięknie działa biggrin.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.