В Laravel можно сложить значения коллекций с помощью метода sum()
, при этом задавая необходимое условие с помощью методов filter()
или where()
. Для решения этой задачи есть несколько подходов, которые я рассмотрю ниже.
Первый подход - использование методов filter()
и sum()
в цепочке вызовов. Для начала, вы можете использовать filter()
для отфильтровки коллекции по определенному условию, а затем применить sum()
для вычисления суммы значений.
$collection = collect([ ['name' => 'Apple', 'quantity' => 2], ['name' => 'Orange', 'quantity' => 5], ['name' => 'Banana', 'quantity' => 3], ]); $total = $collection->filter(function ($item) { // Определяем условие: суммировать только элементы, количество которых больше 2 return $item['quantity'] > 2; })->sum('quantity'); // Результат: $total = 8
Второй подход - использование метода reduce()
. Метод reduce()
позволяет итеративно пробегаться по коллекции и накапливать результаты сложения.
$total = $collection->reduce(function ($carry, $item) { // Определяем условие: суммировать только элементы, количество которых больше 2 if ($item['quantity'] > 2) { return $carry + $item['quantity']; } return $carry; }); // Результат: $total = 8
Третий подход - использование метода sum()
с использованием замыкания (closure). Замыкание позволяет определить условие внутри функции sum()
, используя анонимную функцию.
$total = $collection->sum(function ($item) { // Определяем условие: суммировать только элементы, количество которых больше 2 if ($item['quantity'] > 2) { return $item['quantity']; } return 0; }); // Результат: $total = 8
Все три подхода являются рабочими и возможно использовать любой из них в зависимости от конкретных требований и предпочтений.