如何计算集合对象中对象的重复计数。 PHP / Laravel

时间:2015-11-06 20:03:29

标签: php arrays laravel

我使用这个laravel函数来获取过去30天内创建的所有发票:

$invoice = Invoices::where('created_at', '>=', Carbon::now()->subMonth())->get();

该函数返回一个对象集合,我想要的是获取一个[creation day =>每一个对象在那一天创建的数量。

我正在阅读有关array_count_values但该函数不适用于集合对象。

感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

您可能正在寻找groupBy方法。它允许您将结果分组到集合的集合中。例如:

$invoiceGroup = Invoices::where('created_at', '>=', Carbon::now()->subMonth())
    ->get()
    ->groupBy(function($invoice) {
        return $invoice->created_at->format('d-M-y');
    });

现在,您的所有发票都根据其created_at日期组合在一起。

foreach ($invoiceGroup as $date => $subGroup) {
    echo $date . ': ' . $subGroup->count();
}

这将回显created_at日期和该日期的发票数量。要获得个别发票:

foreach ($invoiceGroup as $date => $subGroup) {
    foreach ($subGroup as $invoice) {
        // Access individual invoices
    }
}

答案 1 :(得分:0)

这就是我为解决问题所做的工作:

foreach ($invoice as $key => $value) {
        $date = Carbon::createFromFormat('Y-m-d H:i:s', $value->created_at);
        $result[$value->quote_number] = $date->day;
    }

然后我使用array_count_values($result)得到我想要的东西,也许有一个内置函数来做我需要的东西,为什么我不会选择这个作为现在的答案。