W3docs

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): array

Cada 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()

php— editable, runs on the server

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], escribes compact('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

php— editable, runs on the server

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"), no compact($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+). Usa isset() 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, consulta get_defined_vars().

Funciones relacionadas

  • extract() — la función inversa de compact(): 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().

Práctica

Práctica
¿Cuál es el papel de la función 'compact()' en PHP?
¿Cuál es el papel de la función 'compact()' en PHP?
Was this page helpful?