2016-06-07 94 views
2

這是我的數組總和數組鍵的多維數組中的元素

[Company] => Array 
     (
      [0] => Array 
       (
        [date] => 2016-05-28 
        [revenue] => 55 
       ) 

      [1] => Array 
       (
        [date] => 2016-05-28 
        [revenue] => 101 
       ) 

      [2] => Array 
       (
        [date] => 2016-05-29 
        [revenue] => 55 
       ) 

      [3] => Array 
       (
        [date] => 2016-05-29 
        [revenue] => 101 
       ) 

      [4] => Array 
       (
        [date] => 2016-05-30 
        [revenue] => 60 
       ) 

      [5] => Array 
       (
        [date] => 2016-05-30 
        [revenue] => 60 
       ) 

      [6] => Array 
       (
        [date] => 2016-05-31 
        [revenue] => 29 
       ) 

      [7] => Array 
       (
        [date] => 2016-05-31 
        [revenue] => 60 
       ) 

) 

我需要它這樣

[Company] => Array 
     (
     [0] => Array 
     (
      [date] => 2016-05-28 
      [revenue] => 151 
     ) 
     * 
     *etc. 
) 

我已經徒勞嘗試了各種方法來概括。我試過下面的方法,但沒有工作得很好

foreach($data as $key => $value) { 
     foreach ($value as $row) { 


      $res[$key][$row['date']] += $row['revenue']; 
     } 
    } 
+0

這是什麼方法我試過用的輸出來實現? –

+0

只是在這裏回答了這個問題。可以easliy適應您的需求http://stackoverflow.com/questions/37675819/php-sum-up-array-entries-where-two-keys-have-the-same-value/376​​76521#37676521 – atoms

+1

另一個問題:你的數組是否總是按日期排序? –

回答

1

這應該工作,它不是理想的,因爲你遍歷每個陣列的兩倍,隨着數組變大,這將成倍放緩。

$aStartingArray = array(); 
$aSortedArray = array(); 

$aStartingArray[] = array('date'=>'2016-05-28', 'revenue' => 55); 
$aStartingArray[] = array('date'=>'2016-05-28', 'revenue' => 101); 
$aStartingArray[] = array('date'=>'2016-05-29', 'revenue' => 55); 
$aStartingArray[] = array('date'=>'2016-05-29', 'revenue' => 101); 
$aStartingArray[] = array('date'=>'2016-05-30', 'revenue' => 60); 
$aStartingArray[] = array('date'=>'2016-05-30', 'revenue' => 60); 
$aStartingArray[] = array('date'=>'2016-05-31', 'revenue' => 29); 
$aStartingArray[] = array('date'=>'2016-05-31', 'revenue' => 60); 

// loop through the initial array 
foreach ($aStartingArray as $aArray) { 

    // set flag to reference if its been dealt with 
    $bSet = false; 

    // foreach of the sorted values, check if the date matches an entry 
    foreach ($aSortedArray as $iPos => $aTempSortedArray) { 

     if($aTempSortedArray['date'] == $aArray['date']){ 

      // match found, add revenue 
      $aSortedArray[$iPos]['revenue'] += $aArray['revenue']; 

      // set flag to illustrate a dealt with row 
      $bSet = true; 
     } 

    } 

    // if still hasnt been dealt with, go add it to the array 
    if(!$bSet){ 
     $aSortedArray[] = array('date' => $aArray['date'], 'revenue' => $aArray['revenue']); 
    } 

} 

var_dump($aSortedArray); 
+0

像天堂 – user3496603

+0

一樣工作。那裏有更好更有效的方法。如果您計劃將其用於大型數據集,請注意 – atoms

0
$revenue_sum=0; 
$elements_sum=0; 
    foreach($data as $key => $value) { // 1st dimension 
     foreach ($value as $key2 => $value2) { // 2nd dimension 
      if ($key2 == "revenue") { 
       $revenue_sum += $value2; 
      } 
      $elements_sum++; 
     } 
    } 

echo "Revenue sum: ".$total_sum; 
echo "Elements sum: ".$elements_sum; 
1

我有@atoms答案, 沒有doutes但它會在一個的foreach

 $newArr = array(); 
    foreach($arr['Company'] as $key => $value) { 
     if(isset($newArr[$value['date']])){ 
      $newArr[$value['date']]['revenue'] = $newArr[$value['date']]['revenue'] + $value['revenue']; 
     } else { 
      $newArr[$value['date']] = $value; 
     } 
    } 
    $newArr = array_values($newArr);