2016-06-07 10 views
2

Das ist mein ArraySumme die Elemente eines Array-Schlüssel in einem mehrdimensionalen 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 
       ) 

) 

Ich brauche es wie dieses

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

aufsummiert werden ich verschiedene Methoden vergeblich versucht haben, . Ich habe die unten Methode versucht, aber recht gut nicht

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


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

Was ist der Ausgang dieses Verfahrens erfolgt ich versucht habe? –

+0

hat gerade diese Frage hier beantwortet. Könnte easliy für Ihre Bedürfnisse angepasst werden http://stackoverflow.com/questions/37675819/php-sum-up-array-entries-where-two-keys-have-the-same-value/37676521#37676521 – atoms

+1

Noch eine Frage: Ist Ihr Array immer nach Datum sortiert? –

Antwort

1

arbeiten Dies sollte funktionieren, es ist nicht ideal als Looping über jedes Array zweimal, da das Array größer wird dies exponentiell verlangsamen.

$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

Funktioniert wie der Himmel – user3496603

+0

danke für die freundlichen Worte. Es gibt viel bessere und effizientere Methoden. Seien Sie vorsichtig, wenn Sie planen, es für große Datenmengen zu verwenden – 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

Ich habe kein Doutes mit @atoms Antwort, aber es wird in einem 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);