У меня есть коллекция, и я хотел бы увеличить значения, если условие выполнено. Я хочу использовать метод 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;
Это работает, но я думаю, что это выглядит довольно странно, и это не такой уж ларавейский способ. Есть ли другой вариант, чтобы это выглядело немного лучше?






Вместо 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
]);
Это лучше? Ну, знаешь, это просто твое мнение, чувак.