我一直在阅读 Laravel 中的集合。目前我知道如何使用它,但是我有一个关于 sum()
的问题。功能。
根据文档,它可以像这样使用:
collect([1, 2, 3, 4, 5])->sum();
也像这样:
$collection = collect([
['name' => 'JavaScript: The Good Parts', 'pages' => 176],
['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);
$collection->sum('pages');
这很好,我理解,但是现在我有一个包含嵌套对象的数组,我想知道如何在 laravel 中实现类似的功能:
$collection = collect([
['name' => 'JavaScript: The Good Parts', 'pages' => 176, 'price' => 100.00],
['name' => 'JavaScript: The Definitive Guide', 'pages' => price, 'pages' => 150.00],
]);
$collection->sum(['pages', 'prices']);
这显然会返回一个这样的数组:
[1272, 250]
或者像这样的集合/对象:
{"total_pages": 1272, "total_price": 250}
简而言之,我想知道如何对 laravel 集合中多列的结果求和并返回结果,而不是这样做两次:
$collection->sum('pages');
$collection->sum('price');
因为我认为这会导致集合上的多个循环还是我错了?
最佳答案
您需要使用 pipe
方法将集合传递给回调。在回调中,您可以实现您想要做的事情。
$collection = collect([
['name' => 'JavaScript: The Good Parts', 'pages' => 176, 'price' => 100.00],
['name' => 'JavaScript: The Definitive Guide', 'pages' => 314, 'price' => 150.00]
]);
$result = $collection->pipe(function ($collection) {
return collect([
'total_pages' => $collection->sum('pages'),
'total_price' => $collection->sum('price'),
]);
});
关于Laravel 集合对集合中的多列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993598/