Приращение в коллекции Laravel

У меня есть коллекция, и я хотел бы увеличить значения, если условие выполнено. Я хочу использовать метод 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;

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 032
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо 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
    ]);

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

Другие вопросы по теме