Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak sumować w takiej tablicy wielowymiarowej?
Forum PHP.pl > Forum > PHP
majma
Mam taką tablicę:
  1. <?php
  2. (
  3.    [0] => Array
  4.        (
  5.            [ownerid] => 100073
  6.            [shipping] => 10
  7.        )
  8.  
  9.    [1] => Array
  10.        (
  11.            [ownerid] => 107266
  12.            [shipping] => 20
  13.        )
  14.  
  15.    [2] => Array
  16.        (
  17.            [ownerid] => 107266
  18.            [shipping] => 35
  19.        )
  20.  
  21.    [3] => Array
  22.        (
  23.            [ownerid] => 100073
  24.            [shipping] => 40
  25.        )
  26.   [4] => Array
  27.        (
  28.            [ownerid] => 123456
  29.            [shipping] => 80
  30.        )
  31. )
  32. ?>


Chciałbym zsumować 'shipping' dla każdego 'ownerid', czyli potrzebuję rezultat:
  1. <?php
  2. (
  3.    [0] => Array
  4.        (
  5.            [ownerid] => 100073
  6.            [shipping] => 50
  7.        )
  8.  
  9.    [1] => Array
  10.        (
  11.            [ownerid] => 107266
  12.            [shipping] => 55
  13.        )
  14.   [2] => Array
  15.        (
  16.            [ownerid] => 123456
  17.            [shipping] => 80
  18.        )
  19. )
  20. ?>


Potrafiłby ktoś mi pomóc?
krowal
Może być np tak:
  1. <?php
  2. $result = array();
  3. foreach($array as $item){
  4.    if (isset($result[$item['ownerid']])){
  5.        $result[$item['ownerid']]['shipping'] += $item['shipping'];
  6.    }else{
  7.        $result[$item['ownerid']]['shipping'] = $item['shipping'];
  8.    }
  9. }
  10. ?>
majma
działa super, ale...
  1. <?php
  2. (
  3.    [100073] => Array
  4.        (
  5.            [shipping] => 400
  6.        )
  7.  
  8.    [107266] => Array
  9.        (
  10.            [shipping] => 800
  11.        )
  12.  
  13.    [112987] => Array
  14.        (
  15.            [shipping] => 1600
  16.        )
  17.  
  18.    [112769] => Array
  19.        (
  20.            [shipping] => 400
  21.        )
  22.  
  23. )
  24. ?>


czegoś takiego nie potrafię sciana.gif przepuścić poźniej przez pętlę, żeby uzyskać w rezultacie, przypuśćmy:

  1. <?php
  2. echo $result['shipping'];
  3. echo $result['ownerid'];
  4. ?>


dla każdego 'ownerid'.

Byłbyś tak dobry i napisał pętlę?

mam już rozwiązanie, byc może komuś się przyda:
  1. <?php
  2.  
  3. //Your initial array
  4. $shops = array (
  5.    0 => array
  6.        (
  7.            'ownerid' => 100073,
  8.            'shipping' => 10
  9.        ),
  10.  
  11.    1 => array
  12.        (
  13.            'ownerid' => 107266,
  14.            'shipping' => 20
  15.        ),
  16.  
  17.    2 => array
  18.        (
  19.            'ownerid' => 107266,
  20.            'shipping' => 35
  21.        ),
  22.  
  23.    3 => array
  24.        (
  25.            'ownerid' => 100073,
  26.            'shipping' => 40
  27.        ),
  28.    4 => array
  29.        (
  30.            'ownerid' => 123456,
  31.            'shipping' => 80
  32.        )
  33. );
  34.  
  35.  
  36. //Create an array that will keep the ownerid as key and the sum of shippings as value
  37. $inter_shops = array ();
  38. foreach ($shops as $data) {
  39.   $inter_shops [$data['ownerid']] += $data['shipping'];
  40. }
  41.  
  42. //You can check if this way is enough
  43. print_r ($inter_shops);
  44.  
  45. //Create the array anyway you want (the way you want it in this case)
  46. $final_shops = array ();
  47. $count = 0;
  48. foreach ($inter_shops as $ownerid => $shipping) {
  49.   $final_shops[$count]['ownerid'] = $ownerid;
  50.   $final_shops[$count]['shipping'] = $shipping;
  51.  
  52.   $count++;
  53. }
  54.  
  55. //See the result
  56. print_r ($final_shops);
  57. ?>
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.