(PHP 4, PHP 5, PHP 7)

compactCria um array contendo variáveis e seus valores


array compact ( mixed $varname [, mixed $... ] )

Cria um array contendo variáveis e seus valores.

Para cada um dos parâmetros passados, compact() procura uma variável com o nome especificado na tabela de símbolos e a adiciona no array de saída de forma que o nome da variável será a chave e o seu conteúdo será o valor para esta chave. Em resumo, ela faz o oposto de extract().

Qualquer string com nome de uma variável que não exista será simplesmente ignorada.



compact() recebe um número variável de parâmetros. Cada parâmetro pode ser ou uma string contendo o nome da variável, ou um array de nomes de variáveis. O array pode conter outros arrays de nomes de variáveis; compact() o manipula recursivamente.

Valor Retornado

Retorna a saída do array com todas as variáveis adicionadas a ele.


Exemplo #1 Exemplo de compact()

"Sao Paulo";
$estado "SP";
$evento "SIGGRAPH";

$localidade = array("cidade""estado");

$result compact("evento""nada_aqui"$localidade);

O exemplo acima irá imprimir:

    [evento] => SIGGRAPH
    [cidade] => Sao Paulo
    [estado] => SP


Nota: Gotcha

Devido a variáveis variável não poderem ser usadas com arrays superglobais do PHP dentro de funções, os arrays superglobais não podem ser passados na compact().

Veja Também

  • extract() - Importa variáveis para a tabela de símbolos a partir de um array

add a note add a note

User Contributed Notes 5 notes

tatarynowicz at gmail dot com
7 years ago
Please note that compact() will _not_ issue a warning if the specified variable name is undefined.
M Spreij
10 years ago
Can also handy for debugging, to quickly show a bunch of variables and their values:

(compact(explode(' ', 'count acw cols coldepth')));


    [count] => 70
    [acw] => 9
    [cols] => 7
    [coldepth] => 10
7 years ago
The description says that compact is the opposite of extract() but it is important to understand that it does not completely reverse extract().  In particluar compact() does not unset() the argument variables given to it (and that extract() may have created).  If you want the individual variables to be unset after they are combined into an array then you have to do that yourself.
jmarkmurph at yahoo dot com
2 years ago
So compact('var1', 'var2') is the same as saying array('var1' => $var1, 'var2' => $var2) as long as $var1 and $var2 are set.
piedone at pyrocenter dot hu
7 years ago
A quick way of compacting all local variables:

= compact(array_keys(get_defined_vars()));

This is useful if you want to return all local variables from a function/method or you want to pass all local variables to one. A valid example would be to use this with application hooks/events (if you want the called hook to be able to modify everything in the caller), but otherwise use with care (as methods should be used through their declared interface).
To Top