2016-11-24 67 views
2

我輸入數組如何找到數組值的總和在一多維數組在PHP

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

我需要輸出

輸出:

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

代碼嘗試(粘貼在從評論)[這裏是一些毫無意義的文字,以便Stack Overflow允許我添加代碼xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]

if(!empty($consumption)) 
    { 
     foreach($consumption as $key=>$val) 
     { 
      foreach($val as $skey=>$sval) 
      { 
       $outPutArray[$skey][] = array_sum($sval); 
      } 
     } 
    } 

    foreach($consumption as $k => $val) 
    { 
    $result[$k] = array_sum(array_column($val, $k)); 
    foreach($val as $skey=>$sval) 
    { 
     $result[$skey] = array_sum(array_column($val, $k)); 
    } 
    } 
+2

你已經嘗試什麼樣的代碼還沒有,顯示那裏。 – Deep

+0

請張貼您的嘗試。你到目前爲止所嘗試過的。 –

+0

'array_sum(array_walk_recursive($陣列));(!空($消耗))' – Bobot

回答

1

使用foreach循環。

$totals = []; 
foreach($consumption as $day){ 
    foreach($day as $machine => $number){ 
     if(!isset($totals[$machine]){ 
      $totals[$machine] = array_sum($number); 
     }else{ 
      $totals[$machine] = $totals[$machine] + array_sum($number); 
     } 
    } 
} 
echo '<pre>'; 
print_r($totals); 
echo '</pre>'; 

現場演示:http://sandbox.onlinephpfunctions.com/code/ad1f529f5b5428c4ea0b9dda2ed20a8baa657d5b

+0

我需要輸出陣列([冰箱] => 47 [洗衣機] => 29 [OVEN] => 28 [電視] => 28 [風扇] => 26) –

+0

我加了array_sum,對不起,陣列在一個像:P –

0

我知道它可能不是最好的方式,但你可以使用一個多維的foreach,並把它放在一個這樣的數組:

foreach($consumption as $consumption_value) { 
    foreach($consumption_value as $key -> $value) { 
     if(isset($consumptions[$key])) { 
      $consumptions[$key] += $value; 
     } 
     else { 
      $consumptions[$key] = $value; 
     } 
    } 
} 
0

使用下面的代碼:

$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))); 

$total_ref = $total_was = $total_oven = $total_tv = $total_fan = 0; 
foreach($consumption as $key=>$products) 
{ 
    foreach($products as $productName => $data) 
    { 
     if(isset($newarr[$productName])) 
     { 
      $newarr[$productName] = $newarr[$productName] + array_sum($data); 
     } 
     else 
     { 
      $newarr[$productName] = array_sum($data); 
     } 
    } 
} 

echo "<pre>"; 
print_r($newarr); 

輸出

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

現場演示: Click Here

+0

我可以得到一個動態代碼?用動態代碼編輯的 –

+0

。請檢查一下。 @PraseethaVasappan – RJParikh

0

檢查demo.結果是,{"REFRIGERATOR":47,"WASHINGMACHINE":29,"OVEN":28,"TV":28,"FAN":26}

希望它能幫助。

<?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

您可以簡單地使用foreach等作爲

$result = []; 
foreach($consumption as $v) 
{ 
    foreach($v as $v_k => $v_v) 
    { 
     if(isset($result[$v_k])) 
      $result[$v_k] += array_sum($v_v); 
     else 
      $result[$v_k] = array_sum($v_v); 
    } 
} 

print_r($result); 

Working Demo