Прирост в коллекции Laravel - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть коллекция, и я хотел бы увеличить значения, если условие выполнено. Я хочу использовать map() метод для итерации и возврата массива (или коллекции) с общим количеством. Пока у меня есть это:

   $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;

Это работает, но я думаю, что это выглядит довольно странно, и это не такой "распутный" способ. Есть ли другой вариант, чтобы он выглядел немного лучше?

1 Ответ

0 голосов
/ 05 ноября 2018

Вместо map() вы можете использовать reduce():

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
    ]);

Это лучше? Ну, вы знаете, это просто ваше мнение, мужик.

...