Arrays\fold()

higher-order reducer terminal accepts iterable returns Closure pure
((A, T) → A, A) → (Iterable → A)
At a glance — The canonical left fold / reduce. Terminal — consumes the source fully but streams it (no materialisation).

Creates a Closure that reduces an array or iterable left-to-right, starting from an initial accumulator. Equivalent to array_reduce but streams Generator input via foreach without materialising it.

/**
  * @param callable(mixed $carry, mixed $value): mixed $callable
  * @param mixed $initial
  * @return Closure(iterable<int|string, mixed>):mixed
  */
Arrays\fold(callable $callable, $initial = []): Closure

Returned Closure

When Arrays\fold() is called, it returns the following Closure which can be used like a regular function.

/**
  * @param iterable<int|string, mixed> $source
  * @return mixed
  */
$function (iterable $source)

Examples

Partial Application

This can be used to create a simple closure which can be used as a regular function.

$sum = Arrays\fold(fn($acc, $n) => $acc + $n, 0);

echo $sum([1, 2, 3, 4]); // 10

Curried

This can be called inline using currying.

echo Arrays\fold(fn($acc, $n) => $acc * $n, 1)([1, 2, 3, 4]); // 24

Details

Arrays Functions

Releated Array fold Functions