sumowanie wielowymiarowej tablicy

0

Hej,
generuję taką tablicę

array:164 [▼
  "2019-06-27" => array:2 [▼
    0 => array:6 [▼
      "date" => "2019-06-27"
      "day" => "26"
      "quantity" => 4998
      "water" => 879.648
      "feed" => 494802
      "weight" => 4548180
    ]
    1 => array:6 [▼
      "date" => "2019-06-27"
      "day" => "6"
      "quantity" => 1000
      "water" => 43.0
      "feed" => 31000
      "weight" => 160000
    ]
  ]
  "2019-06-28" => array:2 [▶]
  "2019-06-29" => array:2 [▶]
  "2019-06-30" => array:2 [▶]
  "2019-07-01" => array:2 [▶]
  "2019-07-02" => array:1 [▶]
  "2019-07-03" => array:1 [▶]

tam gdzie w danym kluczu daty mam dwie tablice .... potrzebuję zsumować jej elementy.
Moje próby jak poniżej. Próbuję to sumować używając jakiejś tymczasowej/pomocniczej tablicy. Dalej chciałbym wstawić tą tymczasową w miejsce tego co sumowałem i usunąć to z tej tablicy.
Jak w PHP sobie z tym poradzić bo zapewne wymyślam coś mega na około... tak naprawdę pożądanym wynikiem jest powyższa tablica ale każdy jej element ( klucz = data ) ma składać się z jedno elementowej tablicy. Klucze "date", "day" można olać - wiadomo.

foreach($test as $key => $val)
        {
            if(count($val) > 1)
            {
                $tmp = array(['quantity'=>0, 'water'=>0, 'feed'=>0, 'weight'=>0]);

                foreach($val as $k => $v)
                {
                    $tmp[0]['quantity'] += $v['quantity'];
                    $tmp[0]['water']    += $v['water'];
                    $tmp[0]['feed']      += $v['feed'];
                    $tmp[0]['weight']   += $v['weight'];
                }
            }
        }
1

Rzuć okiem na https://stackoverflow.com/questions/16138395/sum-values-of-multidimensional-array-by-key-without-loop

Nie jest to rozwiązanie podane wprost (akurat nie mam w tej chwili czasu na napisanie tego dla Ciebie), ale podana wskazówka/kierunek, w którym powinieneś się udać ;)

0

widziałem ten post.
napisałem coś takiego i teraz chciałbym zoptymalizować ten kod
zrobiłem sobie dto z potrzebnymi polami
i tak

foreach($test as $key => $val)
        {
            if(count($val) > 1)
            {
                $tmp = array(['quantity'=>0, 'water'=>0, 'feed'=>0, 'weight'=>0]);

                foreach($val as $k => $v)
                {
                    $tmp[0]['quantity'] += $v['quantity'];
                    $tmp[0]['water']    += $v['water'];
                    $tmp[0]['feed']     += $v['feed'];
                    $tmp[0]['weight']   += $v['weight'];
                }

                $resultDto->push(new FeedBalanceDto([
                    'date'    => $key,
                    'day'     => 0,
                    'quantity'=> $tmp[0]['quantity'],
                    'water'   => $tmp[0]['water'],
                    'feed'    => $tmp[0]['feed'],
                    'weight'  => $tmp[0]['weight']
                ]));
            }
            else
            {
                foreach($val as $k => $v) {
                    $resultDto->push(new FeedBalanceDto([
                        'date'      => $key,
                        'day'       => $v['day'],
                        'quantity'  => $v['quantity'],
                        'water'     => $v['water'],
                        'feed'      => $v['feed'],
                        'weight'    => $v['weight']
                    ]));
                }
            }
        }
1
$sumArray = array();

foreach ($myArray as $date => $subArray) {
    foreach ($subArray as $arr) {
        foreach ($arr as $id => $value) {
            $sumArray[$id] += $value;
        }
    }
}

Mniej więcej. Bez walidacji itp. Uwaga, ze względu na brak poprawnej sumArray na początku może walić warningi. Rozwiązanie - uzupełnić ją zerami.
Można się bawić w jakieś array_sum itp, ale chyba nie ma sensu - trafia się, że działa to wolniej niż takie proste pętle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1