W3docs

Função PHP Array compact

Aprenda como a função compact() do PHP cria um array associativo a partir de variáveis existentes, com sintaxe, exemplos e dicas explicados.

O que é a função compact() do PHP?

compact() é uma função nativa do PHP que cria um array associativo a partir de variáveis existentes. Você passa os nomes das variáveis (como strings) e ela retorna um array cujas chaves são esses nomes e cujos valores são os valores atuais das variáveis. É o inverso de extract(), que transforma um array de volta em variáveis individuais.

Esta página aborda a sintaxe, como compact() resolve nomes de variáveis, como passar nomes como um array, o que acontece com valores null e variáveis indefinidas, e um caso de uso real comum.

Sintaxe

compact(string|array ...$var_names): array

Cada argumento é uma string contendo um nome de variável ou um array dessas strings. compact() retorna o array associativo resultante.

Como funciona?

compact() pesquisa no escopo atual cada nome fornecido. Se uma variável com esse nome existir, ela é adicionada ao resultado (o nome vira a chave e o valor da variável vira o valor) — mesmo quando o valor é null. Se não existir tal variável, esse nome é ignorado, e o PHP 8.0+ emite um aviso ("Undefined variable").

Veja o caso mais simples:

Exemplo básico de compact()

php— editable, runs on the server

Criamos três variáveis e passamos seus nomes para compact(). O array resultante fica assim:

Array (
  [name] => John
  [age] => 30
  [city] => New York
)

Observe que você passa os nomes sem o $ inicial — "name", não $name.

Por que usar compact()?

  • Menos repetição: Em vez de escrever ['name' => $name, 'age' => $age, 'city' => $city], você escreve compact('name', 'age', 'city'). A chave e o nome da variável ficam sincronizados automaticamente.
  • Legibilidade: Quando a chave do array e a variável já compartilham o mesmo nome, compact() elimina o ruído visual de duplicar cada um.
  • Menos erros de digitação: Escrever pares chave-valor manualmente facilita errar a chave. Com compact(), a chave é derivada do nome da variável.

Exemplos

Incluindo uma variável com valor null

php— editable, runs on the server

Aqui $state está definida, mas contém null. Como a variável existe, ela ainda é incluída — seu valor no array é null (que print_r exibe como valor vazio):

Array (
  [name] => John
  [age] => 30
  [city] => New York
  [state] => 
)

Um nome que não tem variável correspondente no escopo é um caso diferente: ele é completamente ignorado (e o PHP 8.0+ emite um aviso). Portanto, compact('name', 'missing') retorna apenas ['name' => 'John'].

Passando os nomes como um array

Qualquer argumento pode ser em si um array de nomes, que compact() achata. Isso é útil quando a lista de campos é criada dinamicamente:

<?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: passando dados para um template

compact() brilha quando você quer entregar a uma view ou template um conjunto de valores nomeados sem precisar montar o array manualmente:

<?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
)

Dicas e armadilhas

  • Passe os nomes das variáveis sem o sinal $: compact("name"), não compact($name).
  • compact() lê apenas o escopo atual — dentro de uma função, ela vê as variáveis locais daquela função, não as globais.
  • Ela inclui variáveis cujo valor é null, mas ignora nomes sem variável correspondente (aviso no PHP 8.0+). Use isset() ou defina a variável antes se precisar que ela esteja presente.
  • Para fazer o caminho inverso — transformar um array em variáveis — use extract(). Para inspecionar quais variáveis existem no escopo, veja get_defined_vars().

Funções relacionadas

Prática

Prática
Qual é o papel da função 'compact()' no PHP?
Qual é o papel da função 'compact()' no PHP?
Was this page helpful?