2016-12-01 2 views
1

Есть массивкак получить сумму multidiamesional массива

$consumption = array(
    'MONDAY' => array(
       'REFRIGERATOR' => array(3, 9, 7), 
       'WASHINGMACHINE' => array(2, 4, 2, 8) 
      ), 
    'TUESDAY' => array(
       'REFRIGERATOR' => array(5, 3, 8), 
       'OVEN' => array(4, 1, 4) 
      ), 
    'WEDNESDAY' => array(
       'TV' => array(6, 9), 
       'REFRIGERATOR' => array(2, 3, 5, 2) 
       ), 
    'THURSDAY' => array(
       'TV' => array(5, 3, 3, 2), 
       'FAN' => array(4, 9, 8, 5) 
       ), 
    'FRIDAY' => array(
       'WASHINGMACHINE' => array(8, 5), 
       'OVEN' => array(3, 9, 7) 
       ) 
); 

нужно, чтобы получить результат, как:

$sum= Array ([REFRIGERATOR] => 47, [WASHINGMACHINE] => 29 ,[OVEN] => 28, [TV] => 28, [FAN] => 26); 

ответ

4

Вы хотите сохранить каждую из них на ключ и приращение общей в массиве. Итерация через каждый из записей, и идти оттуда:

$sums = array(); 
foreach ($consumption as $day=>$products) { 
    foreach ($products as $product=>$sales) { 
     if (!isset($sums[$product])) { 
      $sums[$product] = 0; 
     } 
     $sums[$product] += array_sum($sales); 
    } 
} 
+0

Это выбросит неопределенный индекс. :) –

+0

Как упомянуто @ L.Herrera, это вызовет неопределенную ошибку индекса. – Ronald

+0

Обновлено для исправления указанной неопределенной проблемы с индексом. –

3

проверки результат here

<?php 
    $consumption = array('MONDAY' => array('REFRIGERATOR' => array(3, 9, 7), 'WASHINGMACHINE' => array(2, 4, 2, 8)), 'TUESDAY' => array('REFRIGERATOR' => array(5, 3, 8), 'OVEN' => array(4, 1, 4)), 'WEDNESDAY' => array('TV' => array(6, 9), 'REFRIGERATOR' => array(2, 3, 5, 2)), 'THURSDAY' => array('TV' => array(5, 3, 3, 2), 'FAN' => array(4, 9, 8, 5)), 'FRIDAY' => array('WASHINGMACHINE' => array(8, 5), 'OVEN' => array(3, 9, 7))); 

    $result = []; 
    foreach($consumption as $dayCon) 
    { 
     array_walk($dayCon, function($value, $key) use(&$result) 
     { 
    if(!isset($result[$key])) 
     $result[$key] = 0; 

     $result[$key] += array_sum($value); 
     }); 
    } 
    echo json_encode($result); 
+0

Это вызовет неопределенный индекс. :) –

+0

@ L.Herrera Я действительно хочу знать, как вы его используете, проверили ли вы демо, хорошо работает –

+0

Он хорошо работает на eval.in, но не на самом толковом переводчике :) –

Смежные вопросы