对多维数组中数组键的元素求和

Sum the elements of an array key in a multidimensional array

这是我的数组

[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'];
        }
    }
$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;

这应该可行,但它并不理想,因为您在每个数组上循环两次,随着数组变大,速度会呈指数级下降。

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

我对@atoms 的回答没有异议, 但它将在一个 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);