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]
Practica esta lección
Resuelve los ejercicios del curso de PHP en la app, gratis y con corrección automática.
Empezar a practicar