Метод reduce
Метод reduce применяется к коллекции Laravel и позволяет свернуть все элементы в одно значение, последовательно применяя коллбэк-функцию. Первым параметром передается замыкание, которое принимает аккумулятор и текущий элемент, вторым параметром - начальное значение аккумулятора. Если начальное значение не указано, используется первый элемент коллекции.
Синтаксис
<?php
$res = $collection->reduce(callback, $initialValue);
?>
Пример
Давайте вычислим сумму всех чисел в коллекции:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5]);
$res = $collection->reduce(function ($carry, $item) {
return $carry + $item;
}, 0);
echo $res;
?>
Результат выполнения кода:
"15"
Пример
Давайте объединим все строки в одну с разделителем:
<?php
use Illuminate\Support\Collection;
$collection = new Collection(['a', 'b', 'c', 'd', 'e']);
$res = $collection->reduce(function ($carry, $item) {
if ($carry === null) {
return $item;
}
return $carry . ', ' . $item;
});
echo $res;
?>
Результат выполнения кода:
"a, b, c, d, e"
Пример
Давайте сгруппируем элементы по четности:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5, 6]);
$res = $collection->reduce(function ($carry, $item) {
if ($item % 2 === 0) {
$carry['even'][] = $item;
} else {
$carry['odd'][] = $item;
}
return $carry;
}, ['even' => [], 'odd' => []]);
echo json_encode($res);
?>
Результат выполнения кода:
"{"even":[2,4,6],"odd":[1,3,5]}"
Пример
Давайте вычислим произведение всех чисел:
<?php
use Illuminate\Support\Collection;
$collection = new Collection([1, 2, 3, 4, 5]);
$res = $collection->reduce(function ($carry, $item) {
return $carry * $item;
}, 1);
echo $res;
?>
Результат выполнения кода:
"120"