2016-12-01 97 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上运行良好,但不是在实际的解释器:) –