Inicio > Cursos > PHP > array_map, array_filter y array_reduce
PHPArrays y FuncionesLección 8 de 15

array_map, array_filter y array_reduce

PHP adopta programación funcional con tres funciones clave. array_map($callback, $array) aplica una función a cada elemento y devuelve el array transformado, equivalente a map() en JavaScript. array_filter($array, $callback) devuelve solo los elementos que cumplen una condición, equivalente a filter(). array_reduce($array, $callback, $inicial) acumula todos los elementos en un solo valor usando la función acumuladora, equivalente a reduce(). Estas tres funciones pueden reemplazar la mayoría de loops manuales.

Las arrow functions hacen el código funcional muy conciso. En lugar de array_map(function($n) { return $n * 2; }, $array), escribes array_map(fn($n) => $n * 2, $array).

También puedes encadenar: primero filtrar y luego transformar, por ejemplo array_map(fn($n) => $n * 2, array_filter($a, fn($n) => $n > 1)).

• array_column($registros, 'nombre') → saca una columna de un array de arrays: de [['nombre' => 'Ana'], ['nombre' => 'Bob']] devuelve ['Ana', 'Bob']. Muy útil con resultados de base de datos • usort($a, fn($x, $y) => $x <=> $y) → ordena con tu propia regla. La función devuelve un número negativo, 0 o positivo según cuál va primero, y <=> compara dos valores

<?php
$numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// array_map - transforma cada elemento
$cuadrados = array_map(fn($n) => $n * $n, $numeros);
// [1, 4, 9, 16, 25, ...]

// array_map con múltiples arrays
$a = [1, 2, 3];
$b = [10, 20, 30];
$suma = array_map(fn($x, $y) => $x + $y, $a, $b);
// [11, 22, 33]

// array_filter - filtrar elementos
$pares = array_filter($numeros, fn($n) => $n % 2 === 0);
// Nota: preserva claves! Usar array_values para reindexar
$pares = array_values(array_filter($numeros, fn($n) => $n % 2 === 0));
// [2, 4, 6, 8, 10]

// array_reduce - reducir a un valor
$suma = array_reduce($numeros, fn($acc, $n) => $acc + $n, 0);
// 55

$max = array_reduce($numeros, fn($acc, $n) => $n > $acc ? $n : $acc, PHP_INT_MIN);
// 10

// Ordenar
$arr = [3, 1, 4, 1, 5, 9, 2];
sort($arr);  // Ascendente, reindexar
rsort($arr); // Descendente, reindexar

// usort - orden personalizado
$personas = [
    ["nombre" => "Carlos", "edad" => 28],
    ["nombre" => "Ana", "edad" => 25]
];
usort($personas, fn($a, $b) => $a["edad"] <=> $b["edad"]);

// Búsqueda
$pos = array_search("pera", ["manzana", "pera", "uva"]); // 1
$existe = in_array("uva", ["manzana", "pera", "uva"]);     // true

// Otros útiles
$unicos = array_unique([1,2,2,3,3]); // [1,2,3]
$parte = array_slice($numeros, 2, 3); // [3,4,5]
$merged = array_merge([1,2], [3,4]);  // [1,2,3,4]
Consejo⚠️ array_filter preserva las claves originales. Después de filtrar, aplica array_values() si necesitas índices continuos (0,1,2...).
← Arrays Indexados y AsociativosClases y Objetos →

Practica esta lección

Resuelve los ejercicios del curso de PHP en la app, gratis y con corrección automática.

Empezar a practicar