2010-08-14 126 views
0

我想獲得每行末尾的每行元素的總數以及每列最後每列的元素總數。PHP:如何獲得二維數組元素的總和?

例如:

我有數字的值這樣的數組:

$twoDimArr = array( array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4") 

); 

輸出是這樣的:

$twoDimArr = array( array("1" , "2" , "3" , "4", "total" => "10"), 
        array("1" , "2" , "3" , "4", "total" => "10"), 
        array("1" , "2" , "3" , "4", "total" => "10"), 
        array("1" , "2" , "3" , "4", "total" => "10"), 
        array("1" , "2" , "3" , "4", "total" => "10"), 
        array("1" , "2" , "3" , "4", "total" => "10"), 
        array("1" , "2" , "3" , "4", "total" => "10")) 
        "columnTotal => "array("7" , "14" , "21" , "28", "70") 

    ); 

輸入數組: 行中元素的數量可能會有所不同,但是每個行元素中沒有元素將等於其他行元素。輸入數組中的索引可能是任何東西。

我已經編碼,它是爲我工作,但我不滿意的代碼量。可能有人會編寫更高效,更少的代碼解決方案。

感謝

+0

後也許你現在的代碼,以便我們可以嘗試優化呢? – 2010-08-14 05:31:06

回答

1

這裏是我的解決方案:

function getTotalArray($twoDimArr) { 

    if(!empty($twoDimArr) && is_array($twoDimArr)) { 

     // Create an array to store column total 
     $myArr = array(); 
     for($i = 0; $i < count(end($twoDimArr)); $i++) { 
      $myArr[$i] = 0; 
     } 


     foreach($twoDimArr as $key => $value) { 

      $colCount = 0; 
      $rowCount = 0; 
      $i = 0; 

      foreach($twoDimArr[$key] as $key1 => $value1) { 
       $colCount += $value1; 
       $myArr[$i] += $value1; 
       $i++; 
      } 

      // Add column total 
      $twoDimArr[$key]['total'] = $colCount; 
     } 

     // Last column total that is created while row elements sum 
     $myArr['totaloftotal'] = 0; 
     foreach($twoDimArr as $key2 => $values3) { 
      $myArr['totaloftotal'] += end($twoDimArr[$key2]); 
     } 

     $twoDimArr = array_merge($twoDimArr, array("total" => $myArr)); 

     return $twoDimArr; 

    } else { 

     $twoDimArr = array(); 
     return $twoDimArr; 
    } 

} // end function 
3

在這裏你去

<?php 

$twoDimArr = array( array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4"), 
        array("1" , "2" , "3" , "4") 

); 

$current = 0; 
foreach($twoDimArr as $evaluate) { 
    $total = 0; 
    foreach($evaluate as $value) { 
     $total = $total + $value; 
    } 
    $twoDimArr[$current]['total'] = $total; 
    $twoDimArr['columnTotal'][] = $total; 
    $current++; 
} 

print_r($twoDimArr); 

?> 

編輯它包括你列總。

+0

此處列計數不正確。您將行總計結果添加到列總計結果中。 – NAVEED 2010-08-14 12:08:43

+0

列總數應該是多少? – 2010-08-14 12:40:29

+0

意味着每個列元素的總和。看看我的問題。 ** $ twoDimArr ['columnTotal'] [0] **應該是每行的所有第一個元素的總和。 ** $ twoDimArr ['columnTotal'] [1] **應該是每行所有第二個元素的總和。 – NAVEED 2010-08-14 18:51:50