rpkamp / report-array
轻松从扁平数据创建聚合数组
0.2.2
2021-03-16 19:49 UTC
Requires
- php: ^7.2 || ^8.0
Requires (Dev)
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)