首页  >  文章  >  后端开发  >  如何按列对二维数组中的行进行分组并对另一列求和?

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

Patricia Arquette
Patricia Arquette原创
2024-11-10 08:10:02811浏览

How to Group Rows in a 2D Array by Column and Sum Another Column?

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

在分析表格数据时,经常需要根据共享数据来合并行特定列中的值,同时对其他列执行计算。输入对 2D 数组行进行分组并对不同列中的值求和的挑战。

问题陈述:

您将获得一个 2D 数组,其中每行代表一个数据条目。目标是按指定的分组列(例如“dd”)对这些行进行分组,并对每组内另一列(例如“quantity”)的值求和。结果应该是一个简化的二维数组,具有唯一的分组值和相应的求和列值。

示例:

Input:
[
    ['quantity' => 5,  'dd' => '01-Nov-2012'],
    ['quantity' => 10, 'dd' => '01-Nov-2012'],
    ['quantity' => 3,  'dd' => '02-Nov-2012'],
    ['quantity' => 4,  'dd' => '03-Nov-2012'],
    ['quantity' => 15, 'dd' => '03-Nov-2012'],
];

Desired result:
[
    ['quantity' => 15, 'dd' => '01-Nov-2012'],
    ['quantity' => 3,  'dd' => '02-Nov-2012'],
    ['quantity' => 19, 'dd' => '03-Nov-2012'],
];

解决方案:

要解决此问题,请按照以下步骤操作:

  1. 迭代每一行:逐行遍历输入二维数组。
  2. 检查现有组:确定输出数组中是否已存在当前行分组值('dd')的组。
  3. 如有必要,创建新组: 如果当前行的分组值不存在组,则在输出数组中使用分组值和初始“数量”值为 0 创建一个新条目。
  4. 累积数量: 增量现有或新创建的组的“数量”值除以当前行的“数量”值。
  5. 提取最终数组:将输出数组转换回数字索引格式以匹配

以下是 PHP 中的示例实现:

$in = array(array()); // your input
$out = array();
foreach ($in as $row) {
    if (!isset($out[$row['dd']])) {
        $out[$row['dd']] = array(
            'dd' => $row['dd'],
            'quantity' => 0,
        );
    }
    $out[$row['dd']]['quantity'] += $row['quantity'];
}
$out = array_values($out); // make the out array numerically indexed
var_dump($out);

此解决方案有效地按指定列对行进行分组,累积每个组内的列值,并生成简化的 2D数组作为所需的结果。

以上是如何按列对二维数组中的行进行分组并对另一列求和?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn