array_reduce în PHP

Tablouri (array) PHP 4.0.5+

Reduce un tablou la o singură valoare, aplicând o funcție pe fiecare element.

Sintaxă
array_reduce(array $array, callable $callback, mixed $initial = null): mixed

Ce face array_reduce

array_reduce trece prin elemente și ține minte un rezultat intermediar (numit de obicei $acumulator). La fiecare pas, funcția primește rezultatul de până atunci și elementul curent și returnează noul rezultat.

Valoarea de pornire este $initial. Dacă tabloul este gol, funcția returnează direct $initial.

Parametri

Parametru Descriere
$array Tabloul parcurs.
$callback Funcția fn($acumulator, $element) care returnează noul rezultat.
$initial Opțional. Valoarea de pornire. Implicit null.

Ce returnează

Rezultatul final.

Exemple

Exemplul 1: Totalul unui coș cu cantități

<?php
$cos = [
    ["produs" => "Pix", "pret" => 3, "buc" => 10],
    ["produs" => "Caiet", "pret" => 8, "buc" => 4],
];

$total = array_reduce($cos, fn($suma, $r) => $suma + $r["pret"] * $r["buc"], 0);
echo "Total: $total lei";

Rezultat

Total: 62 lei

Exemplul 2: Gruparea pe orașe

<?php
$clienti = [["nume" => "Ana", "oras" => "Iași"], ["nume" => "Mihai", "oras" => "Cluj"], ["nume" => "Ioana", "oras" => "Iași"]];

$peOrase = array_reduce($clienti, function ($grupe, $c) {
    $grupe[$c["oras"]][] = $c["nume"];
    return $grupe;
}, []);

print_r($peOrase);

Rezultat

Array
(
    [Iași] => Array
        (
            [0] => Ana
            [1] => Ioana
        )

    [Cluj] => Array
        (
            [0] => Mihai
        )

)

Greșeli frecvente

  • Uiți return în funcție. Rezultatul devine null după primul pas.
  • Uiți valoarea inițială când construiești un tablou. Pornești de la null; dă [] ca al treilea parametru.

Comenzi înrudite

  • array_sum / array_product: Adună toate valorile unui tablou (array_sum) sau le înmulțește (array_product).
  • array_map: Aplică o funcție pe fiecare element al unui tablou și returnează tabloul cu rezultatele.
  • array_filter: Păstrează doar elementele dintr-un tablou care îndeplinesc o condiție.