2016-12-01 80 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上運行良好,但不是在實際的解釋器:) –