rpkamp/report-array

轻松从扁平数据创建聚合数组

0.2.2 2021-03-16 19:49 UTC

This package is auto-updated.

Last update: 2024-09-17 03:08:59 UTC


README

轻松从扁平数据创建聚合数组。

例如,从关系型数据库中获取的扁平数据创建结构化数组可能相当麻烦。

假设你有以下表格中的数据

你希望将其转换成以下数组

$report = [
    'foo' => [
        'NL' => 5,
        'US' => 10,
    ],
    'bar' => [
        'UK' => 3,
        'DE' => 10,
    ]
];

你经常得到的是这样的代码

$report = [];
foreach ($rows as $row) {
    if (!isset($report[$row['product']][$row['country']])) {
        $report[$row['product']][$row['country']] = 0;
    }
    $report[$row['product']][$row['country']] += $row['count'];
}

这里的isset部分占用了3行,难以阅读。这就是ReportArray发挥作用的地方。你不需要上面的代码,而是可以这样做

$storage = new rpkamp\ReportArray\Storage();
$report = new rpkamp\ReportArray\ReportArray($storage);

foreach ($rows as $row) {
    $report->add($row['product'], $row['country'], $row['count']);
}

在任何时候,如果你想得到上面的数组,只需调用$report->get()

就是这样。不再需要isset,只需告诉类添加一个值,它将自动为尚未设置的关键字假设值为0。如果你想使用除0以外的默认值,请将其作为参数传递给rpkamp\ReportArray\Storage类的构造函数。

除了add方法之外,还有sub(减法)、mul(乘法)、div(除法)、pow(幂)和root(根)方法。

安装

在命令行中运行

composer require rpkamp/report-array

添加方法

如果你需要,可以轻松添加自己的方法,只需将其提供给rpkamp\ReportArray\ReportArray#addMethod

例如

$storage = new rpkamp\ReportArray\Storage();
$report = new rpkamp\ReportArray\ReportArray($storage);

$report->addMethod('myCustomMethod', function ($carry, $value) {
    return 2 * $carry + $value;
});

$report->set('foo', 2);
$report->myCustomMethod('foo', 10);
$report->get(); // returns ['foo' => 14] (2 * 2 + 10)