插件窝 干货文章 如何高效合并并分组汇总PHP二维数组中的日期和数值?

如何高效合并并分组汇总PHP二维数组中的日期和数值?

数组 value date 二维 167    来源:    2025-03-15

在PHP中,如果你有一个二维数组,并且想要根据日期进行合并和分组汇总数值,你可以使用array_reduce函数来实现。以下是一个示例代码,展示了如何高效地合并并分组汇总二维数组中的日期和数值。

假设你有一个二维数组$data,结构如下:

$data = [
    ['date' => '2023-10-01', 'value' => 100],
    ['date' => '2023-10-01', 'value' => 200],
    ['date' => '2023-10-02', 'value' => 150],
    ['date' => '2023-10-02', 'value' => 250],
    ['date' => '2023-10-03', 'value' => 300],
];

你想要根据date字段合并并汇总value字段,最终得到一个按日期分组并汇总数值的数组。

实现代码

$data = [
    ['date' => '2023-10-01', 'value' => 100],
    ['date' => '2023-10-01', 'value' => 200],
    ['date' => '2023-10-02', 'value' => 150],
    ['date' => '2023-10-02', 'value' => 250],
    ['date' => '2023-10-03', 'value' => 300],
];

$result = array_reduce($data, function ($carry, $item) {
    $date = $item['date'];
    $value = $item['value'];

    if (!isset($carry[$date])) {
        $carry[$date] = 0;
    }

    $carry[$date] += $value;

    return $carry;
}, []);

print_r($result);

输出结果

Array
(
    [2023-10-01] => 300
    [2023-10-02] => 400
    [2023-10-03] => 300
)

代码解释

  1. array_reduce函数array_reduce函数用于将数组中的元素通过回调函数逐个处理,最终返回一个单一的值。在这里,我们使用它来逐步构建一个按日期分组并汇总数值的数组。

  2. 回调函数:回调函数接收两个参数:

    • $carry:这是累加器,它保存了当前的处理结果。
    • $item:这是当前正在处理的数组元素。
  3. 逻辑处理

    • 首先,从$item中提取datevalue
    • 检查$carry中是否已经存在该日期的键。如果不存在,则初始化该日期的值为0。
    • 将该日期的值与当前value相加,更新$carry中的值。
    • 最后返回更新后的$carry
  4. 初始值array_reduce的第三个参数是一个空数组[],这是$carry的初始值。

总结

通过使用array_reduce函数,你可以高效地合并并分组汇总PHP二维数组中的日期和数值。这种方法简洁且易于理解,适用于大多数类似的需求。