【问题标题】:Group by and sum in a collection在集合中分组和求和
【发布时间】:2019-02-07 16:27:58
【问题描述】:

我不知道是否有一种简单的方法可以完成我想做的事情,所以我想我不妨问问。我确实搜索过这个问题的答案,但我找不到类似的东西。

我有一个名为 $data 的变量,它包含一个看起来像这样的集合:

[
    "date" => "2017-10-07 10:00:00"
    "usage" => 0.423
    "costs" => 1.212
],
[
    "date" => "2017-10-07 11:00:00"
    "usage" => 0.786
    "costs" => 1.564
],
[
    "date" => "2017-10-07 12:00:00"
    "usage" => 0.542
    "costs" => 1.545
]

(数据可以每小时记录长达 2 个月,为了便于阅读,我在本例中选择仅包含 3 小时)

如您所见,都是每小时(这也是代码中不同部分所需的数据)我想要每天单独收集。有没有一种简单的方法可以按日期分组('Ymd')并对usagecosts 求和?我还应该提到并非集合中的所有项目都有所有索引。有些没有usage,有些没有costs。然而,所有人都有date

【问题讨论】:

    标签: laravel laravel-collection


    【解决方案1】:

    您可以通过以下方式实现此目的:

    $collection = collect([
        [
            "date" => "2017-10-07 10:00:00",
            "usage" => 0.423,
            "costs" => 1.212
        ],
        [
            "date" => "2017-10-07 11:00:00",
            "usage" => 0.786,
            "costs" => 1.564
        ],
        [
            "date" => "2017-10-07 12:00:00",
            "usage" => 0.542,
            "costs" => 1.545
        ],
        [
            "date" => "2017-10-08 10:00:00",
            "costs" => 1.1
        ],
        [
            "date" => "2017-10-08 11:00:00",
            "usage" => 0.786,
        ],
        [
            "date" => "2017-10-08 12:00:00",
            "costs" => 1.567
        ]
    ]); 
    
    
    return $collection->groupBy(function($row) {
        return Carbon\Carbon::parse($row['date'])->format('Y-m-d'); 
    })->map(function($value, $key) {
        return [
            'usage' => $value->sum('usage'), 
            'costs' => $value->sum('costs')
        ];
    });
    

    上面的输出将是这样的:

    Collection {#267 ▼
      #items: array:2 [▼
        "2017-10-07" => array:2 [▶]
        "2017-10-08" => array:2 [▼
          "usage" => 0.786
          "costs" => 2.667
        ]
      ]
    }
    

    从上面可以看出,有些项目没有usagecosts。它仍然可以工作。

    这里还有一个example 你可以玩。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2020-09-03
      • 1970-01-01
      • 2021-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多