按一列对二维数组中的数据进行分组并对另一列求和

问题描述 投票:0回答:2

我需要帮助对数组中的值求和。该数组称为 $results,我需要对每个月的 Total_Sales 值进行求和。编辑-我有下面的循环,我需要得到结果;但是我收到通知。如何改进代码以免收到这些通知?

这是数组:

$结果

array(4) {
  [0]=>
  array(3) {
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "AU"
    ["Total_Sales"]=>
    string(7) "9095.70"
  }
  [1]=>
  array(3) {
    ["Month"]=>
    string(1) "1"
    ["Country"]=>
    string(2) "CA"
    ["Total_Sales"]=>
    string(9) "113993.00"
  }
  [2]=>
  array(3) {
    ["Month"]=>
    string(1) "2"
    ["Country"]=>
    string(2) "AU"
    ["Total_Sales"]=>
    string(7) "7393.65"
  }
  [4]=>
  array(3) {
    ["Month"]=>
    string(1) "2"
    ["Country"]=>
    string(2) "CA"
    ["Total_Sales"]=>
    string(9) "100279.43"
  }

这是我需要的:

array(2) {
  [1]=>
  array(2) {
    ["MONTH"]=>
    string(1) "1"
    ["Total_Sales"]=>
    float(123088.7)
  }
  [2]=>
  array(2) {
    ["MONTH"]=>
    string(1) "2"
    ["Total_Sales"]=>
    float(107673.08)
  }

我知道我需要循环,但不知道从这里去哪里。

$newarr=array();
foreach($results as $key) {

}

编辑:这个循环得到了我需要的结果,但抛出了我不想要的通知。

$newarr=array();
foreach($results as $value) {
    $Month = $value['MONTH'];
    $Total_Sales = $value['Total_Sales'];
    array_key_exists( $Month, $newarr ) ? $newarr[$Month]['MONTH'] = $Month : $newarr[$Month]['MONTH'] = 0;
    array_key_exists( $Month, $newarr ) ? $newarr[$Month]['Total_Sales']+=$Total_Sales : $newarr[$Month]['Total_Sales'] = 0;
}

结果中的通知

注意:未定义索引:Total_Sales位于/var/www/html/analytics/views/sales_year_line_data.php第134行

注意:未定义索引:Total_Sales位于/var/www/html/analytics/views/sales_year_line_data.php第134行

php arrays multidimensional-array sum grouping
2个回答
1
投票

我收集了你需要的数组的键是月份整数(我可以看到它从 1 开始)。

让我们尝试一下:

$totals = array();

foreach ($results as $result) {
    $currentMonth = $result['Month'];
    // For the first record for a given month, we need to add an "empty" record
    if (!array_key_exists($currentMonth, $totals)) {
        $totals[$currentMonth] = array(
            'MONTH' => $currentMonth,
            'Total_Sales' => 0,
        );
    }

    // Then we can sum totals
   $totals[$currentMonth]['Total_Sales'] += $result['Total_Sales'];
}

var_dump($results)
给我:

array (size=2)
  1 => 
    array (size=2)
      'MONTH' => string '1' (length=1)
      'Total_Sales' => float 123088.7
  2 => 
    array (size=2)
      'MONTH' => string '2' (length=1)
      'Total_Sales' => float 107673.08

0
投票

在循环中,您只需添加值:

$newarr=array();
foreach($results as $val) {
  // index your new array by month so you can easily add to total sales
  $month = $val['Month'];
  $newarr[$month]['Month'] = $month;
  $newarr[$month]['Total_Sales'] += $val['Total_Sales'];
}

// to get rid of your month-based index, use array_values
$finalarray = array_values($newarr);
© www.soinside.com 2019 - 2024. All rights reserved.