Понимание операции сведения в Коллекциях Laravel

Источник: «Understanding Reduce Operations in Laravel: A Beginner's Guide»
В Коллекциях Laravel есть хелпер, помогающий работать с массивами данных. Для работы с данными используется подход функционального программирования, и одной из операций, которую можно выполнить, является операция сведения

Концепция операций сведения поначалу может показаться пугающей. Однако как только поймёте основную идею, обнаружите, что это мощный инструмент, который может упростить код и сделать его более выразительным. В этой статье мы разложим операции сведения на простые для понимания концепции и приведём практические примеры с использованием метода reduce() коллекции Laravel.

Что такое операция сведения

Представьте, что вы лепите снежный ком. Начинаете с небольшой горсти снега и катаете его по земле. По мере того как он катится, снежный ком набирает всё больше снега, становясь всё больше и больше. К концу снежного путешествия получился один большой снежный ком.

Этот процесс создания снежного кома — прекрасная аналогия для операций сведения в программировании:

  1. Первоначальный маленький снежок — это начальное значение.
  2. Снег на земле представляет собой коллекцию данных.
  3. Скатывание снежного кома — это как применение функции к каждой части данных.
  4. Конечный большой снежный ком — это результат.

Говоря языком программирования, мы берём набор данных и сводим их к одному значению или результату.

Сведение в Коллекциях Laravel

Laravel предоставляет мощный метод reduce() для коллекций. Вот основной синтаксис:

$result = $collection->reduce(function ($carry, $item) {
// Выполнение операции
return $carry;
}, $initial);

Давайте разберёмся:

Пример: Расчёт суммы счета в ресторане

Давайте на практическом примере проиллюстрируем, как работает сведение. Представьте, что подсчитываете общую сумму счета в ресторане:

$menuItems = collect([
['item' => 'Burger', 'price' => 10],
['item' => 'Fries', 'price' => 5],
['item' => 'Drink', 'price' => 2]
]);

$total = $menuItems->reduce(function ($carry, $item) {
return $carry + $item['price'];
}, 0);

// $total - 17

Вот что происходит:

Другие примеры операций сведения

Сведение нужно не только для сложения чисел. Вот ещё несколько примеров, иллюстрирующих его универсальность:

Поиск максимального значения

$numbers = collect([3, 7, 2, 5, 9]);
$max = $numbers->reduce(fn($carry, $item) => max($carry, $item), PHP_INT_MIN);
// $max - 9

Конкатенация строк

$words = collect(['Hello', 'world', '!']);
$sentence = $words->reduce(fn($carry, $item) => $carry . ' ' . $item, '')->trim();
// $sentence - "Hello world !"

Создание массива на основе условия

$numbers = collect([1, 2, 3, 4, 5]);
$evens = $numbers->reduce(function($carry, $item) {
if ($item % 2 == 0) {
$carry[] = $item;
}
return $carry;
}, []);
// $evens - [2, 4]

Заключение

reduce() — мощный инструмент в арсенале программирования Laravel. Он позволяет лаконично выражать сложные преобразования и часто заменяют циклы и условные операторы более функциональными конструкциями программирования. Когда освоитесь с этой концепцией, найдёте множество возможностей упростить свой код и сделать его более выразительным с помощью операций сокращения.

Помните, что, как и в случае со снежным комом, ключом к освоению сведения является практика. Начните с простых примеров и постепенно переходите к более сложным сценариям.

Дополнительные материалы

Предыдущая Статья

Почему я предпочитаю функции массива циклам

Следующая Статья

Когда использовать if, switch и match в PHP