Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]dodanie klucza i wartości do tablicy
Forum PHP.pl > Forum > Przedszkole
jakis_login
witam,
mam taką zmienna np. $zmienna gdzie po wykonaniu print_r pokazuje mi coś takiego:
  1. (
  2. [0] => Array
  3. (
  4. [price] => 170
  5. [prices] => Array
  6. (
  7. [0] => Array
  8. (
  9. [product_id] => 19086
  10. [price] => 170,00
  11. )
  12.  
  13. [1] => Array
  14. (
  15. [product_id] => 19086
  16. [price] => 164,90
  17. )
  18. )
  19. )
  20.  
  21. [1] => Array
  22. (
  23. [price] => 170
  24. [prices] => Array
  25. (
  26. [0] => Array
  27. (
  28. [product_id] => 19088
  29. [price] => 170,00
  30. )
  31.  
  32. [1] => Array
  33. (
  34. [product_id] => 19088
  35. [price] => 164,90
  36. )
  37. )
  38. )
  39. )


Teraz proszę pomóżcie mi dodać do $zmienna następną wartość do tablicy np. [pricevat] którą bedę chciał zrobić * 1.23

  1. [1] => Array
  2. (
  3. [price] => 170
  4. [prices] => Array
  5. (
  6. [0] => Array
  7. (
  8. [product_id] => 19088
  9. [price] => 170,00
  10. [pricevat] => 170,00
  11. )
  12.  
  13. [1] => Array
  14. (
  15. [product_id] => 19088
  16. [price] => 164,90
  17. [pricevat] => 164,90
  18. )
  19. )
  20. )

darko
Tak z głowy pewnie będzie coś takiego, ale sprawdź czy działa:
  1. foreach($zmienna as $a => $b)
  2. {
  3. foreach($b as $c => $d)
  4. {
  5. foreach($c['prices'] as $e => $f)
  6. {
  7. foreach($f as $g => $h)
  8. {
  9. $h['pricevat'] = 1.23 * $h['price'];
  10. }
  11. }
  12. }
  13. }
jakis_login
hmmm. coś nie działa, nie dorzuca wcale pricevat, może o jedno foreach za dużo?
darko
Wklej tutaj tą tablicę, a nie print_r z tablicy.
jakis_login
powiedzmy ze coś takiego:
  1. $arr = array(
  2. 0=>array('price'=>170, 'prices'=>array(0=>array('product_id'=>212, 'price'=>333), 1=>array('product_id'=>212, 'price'=>333)) ), 1=>array('price'=>170, 'prices'=>array(0=>array('product_id'=>212, 'price'=>333), 1=>array('product_id'=>212, 'price'=>333)) )
  3. );


oczywiście może być tych danych wiecej
darko
Ku mojemu zaskoczeniu*) taki zapis nie zadział:
  1. foreach($zmienna as $a => $b)
  2. {
  3. foreach($b['prices'] as $c => $d)
  4. {
  5. $d['pricevat'] = floatval($d['price'] * 1.23);
  6. }
  7. }

Jednak taki już tak:
  1. $i = 0;
  2. $o = 0;
  3. foreach($zmienna as $a => $b)
  4. {
  5. foreach($b['prices'] as $c => $d)
  6. {
  7. $zmienna[$o]['prices'][$i]['pricevat'] = $d['price'] * 1.23;
  8. $i++;
  9. }
  10. $o++;
  11. $i = 0;
  12. }


*) heh przecież foreach działa na kopii zmiennej
piotr.kazmierczak
Dokładnie, więc trzeba by zrobić tak (referencja):

  1. foreach($zmienna as $a => &$b)
  2. {
  3. foreach($b['prices'] as $c => &$d)
  4. {
  5. $d['pricevat'] = floatval($d['price'] * 1.23);
  6. }
  7. }

jakis_login
wieeeeeelkie dzieki darko, działa ok.

Wiem, ze tak się raczej nie robi ale czy jest szansa abyś pomógł mi jeszcze tylko zrobić gdy jest wyżej jeszcze jedna tablica np.

  1. $arr = array(
  2. 0=>array( 0=>array('price'=>170, 'prices'=>array(0=>array('product_id'=>212, 'price'=>'33,12'), 1=>array('product_id'=>212, 'price'=>'12,25')) ), 1=>array('price'=>170, 'prices'=>array(0=>array('product_id'=>212, 'price'=>333), 1=>array('product_id'=>212, 'price'=>333))) ),
  3.  
  4. 1=>array( 0=>array('price'=>170, 'prices'=>array(0=>array('product_id'=>212, 'price'=>'33,12'), 1=>array('product_id'=>212, 'price'=>'12,25')) ), 1=>array('price'=>170, 'prices'=>array(0=>array('product_id'=>212, 'price'=>333), 1=>array('product_id'=>212, 'price'=>333))) ));


czyli po print_r to wygląda tak:

  1. (
  2. [0] => Array
  3. (
  4. [0] => Array
  5. (
  6.  
  7. [price] => 36
  8. [prices] => Array
  9. (
  10. [0] => Array
  11. (
  12. [product_id] => 19531
  13. [threshold] => 1
  14. [price] => 36,00
  15. )
  16.  
  17. [1] => Array
  18. (
  19. [product_id] => 19531
  20. [threshold] => 5
  21. [price] => 34,20
  22. )
  23. // itd......


Z góry dziękuję
piotr.kazmierczak
Poprostu dodajesz kolejnego foreacha

  1. foreach($zmienna as $a => &$b){
  2. foreach($b as $key => &$value)
  3. {
  4. foreach($value['prices'] as $c => &$d)
  5. {
  6. $d['pricevat'] = floatval($d['price'] * 1.23);
  7. }
  8. }
  9. }
darko
Dokładnie tak, jak podał ~piotr.kazmierczak i tylko pamiętaj, że separatorem dziesiętnym w php jest znak kropki (.), a nie przecinek.
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.