Da trilha de PHP Este conceito ainda não saiu como card do dia. ir para o card de hoje

PHP Coleções Intermediário

Funções de array funcionais

Em PHP, as funções de array funcionais permitem processar coleções de forma declarativa, sem loops explícitos. As principais são array_map (transformar cada elemento), array_filter (selecionar elementos), array_reduce (reduzir a um único valor) e usort (ordenar com critério personalizado).

Essas funções recebem callbacks (funções anônimas ou setas) que definem a lógica. Elas não modificam o array original, mas retornam um novo array (exceto usort, que ordena no lugar). Isso torna o código mais expressivo e menos propenso a erros de índice.

Combinar essas funções em cadeia é uma prática comum: por exemplo, filtrar, mapear e reduzir para calcular totais. O PHP moderno (8.x) suporta arrow functions (fn() => ...), que deixam o código ainda mais conciso.

Neste card, você verá exemplos práticos e exercícios para dominar essas quatro funções e aplicá-las em cenários do dia a dia.

Pontos-chave

  • array_map aplica uma função a cada elemento e retorna um novo array com os resultados.
  • array_filter seleciona elementos com base em um callback que retorna true ou false.
  • array_reduce acumula um valor único percorrendo o array com uma função de redução.
  • usort ordena um array pelos valores usando uma função de comparação personalizada.
  • Essas funções não alteram o array original (exceto usort, que ordena no lugar).
array_funcional.php
<?php
// Exemplo prático das funções funcionais de array

$produtos = [
    ['nome' => 'Teclado', 'preco' => 150, 'estoque' => 10],
    ['nome' => 'Mouse', 'preco' => 80, 'estoque' => 0],
    ['nome' => 'Monitor', 'preco' => 900, 'estoque' => 5],
    ['nome' => 'Headset', 'preco' => 200, 'estoque' => 2],
];

// 1. Filtrar apenas produtos com estoque > 0
$disponiveis = array_filter($produtos, fn($p) => $p['estoque'] > 0);

// 2. Mapear para obter apenas os nomes
$nomes = array_map(fn($p) => $p['nome'], $disponiveis);

// 3. Ordenar os disponíveis por preço (do mais barato ao mais caro)
usort($disponiveis, fn($a, $b) => $a['preco'] <=> $b['preco']);

// 4. Calcular o valor total em estoque (preço * quantidade)
$valorTotal = array_reduce(
    $disponiveis,
    fn($acc, $p) => $acc + ($p['preco'] * $p['estoque']),
    0
);

echo "Produtos disponíveis: " . implode(', ', $nomes) . "\n";
echo "Valor total em estoque: R$ " . number_format($valorTotal, 2, ',', '.') . "\n";

Exercícios

  1. 1
    Fácil

    Dobrar números com array_map

    Dado um array de números inteiros, use array_map para criar um novo array com cada número multiplicado por 2. Exiba o array resultante separado por vírgulas.

    Resolver
  2. 2
    Médio

    Filtrar e ordenar produtos

    Dado um array de produtos com nome e preco, use array_filter para manter apenas os produtos com preço maior que 100 e depois use usort para ordená-los do mais barato ao mais caro. Exiba o nome e o preço de cada produto no formato nome: R$ preco.

    Resolver
  3. 3
    Desafio

    Relatório de vendas com reduce

    Dado um array de vendas, cada uma com produto, quantidade e precoUnitario, use array_map para calcular o total de cada venda, array_filter para manter apenas vendas acima de R$ 100, array_reduce para somar o faturamento total e usort para ordenar as vendas do maior para o menor total. Exiba um relatório com o total geral e a lista ordenada.

    Resolver

Continue estudando