Función compact() de Arrays en PHP
Aprende cómo compact() de PHP crea un array asociativo desde variables existentes, con sintaxis, ejemplos y errores comunes explicados.
¿Qué es la función compact() de PHP?
compact() es una función integrada de PHP que construye un array asociativo a partir de variables existentes. Se le pasan los nombres de las variables (como strings), y devuelve un array cuyas claves son esos nombres y cuyos valores son los valores actuales de las variables. Es la función inversa de extract(), que convierte un array en variables individuales.
Esta página cubre la sintaxis, cómo compact() resuelve los nombres de variables, cómo pasar nombres como un array, qué ocurre con valores null y variables no definidas, y un caso de uso real habitual.
Sintaxis
compact(string|array ...$var_names): arrayCada argumento es un string con el nombre de una variable, o un array de esos strings. compact() devuelve el array asociativo resultante.
¿Cómo funciona?
compact() busca en el ámbito actual cada nombre que le proporcionas. Si existe una variable con ese nombre, se agrega al resultado (el nombre se convierte en la clave y el valor de la variable en el valor), incluso cuando el valor es null. Si no existe tal variable, ese nombre se omite y PHP 8.0+ emite una advertencia ("Undefined variable").
Este es el caso más sencillo:
Ejemplo básico de compact()
Creamos tres variables y pasamos sus nombres a compact(). El array resultante tiene este aspecto:
Array (
[name] => John
[age] => 30
[city] => New York
)Ten en cuenta que se pasan los nombres sin el $ inicial — "name", no $name.
¿Por qué usar compact()?
- Menos repetición: En lugar de escribir
['name' => $name, 'age' => $age, 'city' => $city], escribescompact('name', 'age', 'city'). La clave y el nombre de la variable se mantienen sincronizados automáticamente. - Legibilidad: Cuando la clave del array y la variable ya comparten el mismo nombre,
compact()elimina el ruido visual de duplicar cada uno. - Menos errores tipográficos: Escribir pares clave-valor a mano facilita cometer errores al escribir una clave. Con
compact(), la clave se deriva del nombre de la variable.
Ejemplos
Incluir una variable con valor null
Aquí $state está definida pero contiene null. Como la variable existe, se incluye igualmente — su valor en el array es null (que print_r muestra como un valor vacío):
Array (
[name] => John
[age] => 30
[city] => New York
[state] =>
)Un nombre que no tiene ninguna variable correspondiente en el ámbito es un caso diferente: se omite por completo (y PHP 8.0+ emite una advertencia). Entonces compact('name', 'missing') devuelve solo ['name' => 'John'].
Pasar los nombres como un array
Cualquier argumento puede ser en sí mismo un array de nombres, que compact() aplana. Esto resulta útil cuando la lista de campos se construye dinámicamente:
<?php
$name = "John";
$age = 30;
$city = "New York";
$fields = ["name", "age"];
$myArray = compact("city", $fields);
print_r($myArray);
?>Array (
[city] => New York
[name] => John
[age] => 30
)Uso real: pasar datos a una plantilla
compact() brilla cuando quieres entregar a una vista o plantilla un conjunto de valores con nombre sin tener que construir el array a mano:
<?php
function renderProfile() {
$username = "jdoe";
$role = "admin";
$isActive = true;
// Pass all three as a tidy associative array
return compact("username", "role", "isActive");
}
print_r(renderProfile());
?>Array (
[username] => jdoe
[role] => admin
[isActive] => 1
)Consejos y errores comunes
- Pasa los nombres de variables sin el signo
$:compact("name"), nocompact($name). compact()lee solo el ámbito actual — dentro de una función, accede a las variables locales de esa función, no a las globales.- Incluye variables cuyo valor es
null, pero omite nombres sin una variable correspondiente (advertencia en PHP 8.0+). Usaisset()o define la variable primero si necesitas que esté presente. - Para hacer lo contrario — convertir un array en variables — usa
extract(). Para inspeccionar qué variables existen en el ámbito, consultaget_defined_vars().
Funciones relacionadas
extract()— la función inversa decompact(): importa las claves de un array como variables.get_defined_vars()— devuelve todas las variables definidas en el ámbito actual.- Arrays asociativos — el tipo de array que produce
compact().