Laravel 集合中的增量

Increment in Laravel collection

我有一个集合,如果满足条件,我想增加值。我想使用 map() 方法迭代和 return 数组(或集合)的总计数。到目前为止我有这个:

   $counts = [
        'notChecked' => 0,
        'published' => 0,
        'total' => 0
    ];

    $this->reviewPhotosRepository->getByHotelId($hotel_id)->map(function($photo) use (&$counts) {
        $photo->checked ?: $counts['notChecked']++;
        $photo->published ?: $counts['published']++;
        $counts['total']++;
    });

    return $counts;

它有效,但我认为它看起来很奇怪并且不是这样的 'laravelish' 方式。有没有其他更好看的选择?

您可以使用 reduce():

而不是 map()
return $this->reviewPhotosRepository
    ->getByHotelId($hotel_id)
    ->reduce(function ($carry, $item) {
        $carry['notChecked'] += $item['checked'] ? 1 : 0;
        $carry['published'] += $item['published'] ? 1 : 0;
        $carry['total'] += 1;
        return $carry;
    }, [
        'notChecked' => 0,
        'published' => 0,
        'total' => 0
    ]);

好点了吗?嗯,你知道,这只是,就像,你的意见,伙计。