Funções para Array
PHP Manual

extract

(PHP 4, PHP 5, PHP 7)

extractImporta variáveis para a tabela de símbolos a partir de um array

Descrição

int extract ( array $var_array [, int $extract_type [, string $prefix ]] )

Importar variáveis a partir de um array para a tabela de símbolos corrente.

extract() verifica cada chave e vê se ela tem um válido nome de variável. Também verifica por colisões com já existente variáveis na tabela de símbolo.

Parâmetros

var_array

Um array associativo. Esta função trata chaves como nome de variáveis e valores com os valores da variáveis. Para cada par chave/valor ela cria uma variável na atual tabela de símbolo, seguindo os parâmetros extract_type e prefix.

Você precisa usar um array associativo, um array numericamente indexado não irá produzir resultado até que você use EXTR_PREFIX_ALL ou EXTR_PREFIX_INVALID.

extract_type

A forma como inválida/chaves numéricas e colisões são tratadas é determinada por extract_type. Pode ser um dos seguintes valores:

EXTR_OVERWRITE
Se houver uma colisão, sobrescreve a variável existente.
EXTR_SKIP
Se houver uma colisão, não sobrescreve a variável existente.
EXTR_PREFIX_SAME
Se houver uma colisão, adiciona um prefixo ao nome da variável definido pelo argumento prefix.
EXTR_PREFIX_ALL
Adiciona um prefixo ao nome de todas as variáveis definido por prefix.
EXTR_PREFIX_INVALID
Adiciona um prefixo definido por prefix apenas para variáveis como nomes inválidos ou numéricos.
EXTR_IF_EXISTS
Só sobrescreve a variável se ela já existe na tabela de símbolos corrente, caso contrário, não faz nada. Isso é útil quando se quer definir uma lista de variáveis válidas e então extrair só as que foram definidas em $_REQUEST, por exemplo.
EXTR_PREFIX_IF_EXISTS
Só cria nomes de variáveis usando o prefixo se na tabela de símbolos já existe uma variável com o nome sem esse prefixo.
EXTR_REFS
Extrai variáveis como referências, ou seja, os valores das variáveis importadas ainda estarão referenciando os valores do parâmetro var_array. Essa opção pode ser usada sozinha ou em conjunto com as outras usando o operador 'ou' em extract_type.

Se extract_type não for especificado, é assumido o valor EXTR_OVERWRITE.

prefix

Note que prefix só é necessário se extract_type for EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, ou EXTR_PREFIX_INVALID ou EXTR_PREFIX_IF_EXISTS. Se o nome com o prefixo não for um nome de variável válido, ela não será importada para a tabela de símbolos. Prefixos são automaticamente separados da chave do array pelo caractere underscore.

Valor Retornado

Retorna o número de variáveis importadas com sucesso para a tabela de símbolo.

Changelog

Versão Descrição
4.3.0 EXTR_REFS foi adicionado.
4.2.0 EXTR_IF_EXISTS e EXTR_PREFIX_IF_EXISTS foram adicionados.
4.0.5 Esta função agora retorna um número de variáveis extraídas. EXTR_PREFIX_INVALID foi adicionado. EXTR_PREFIX_ALL inclue variáveis numéricas também.

Exemplos

Exemplo #1 Exemplo da extract()

Uma possível utilização de extract() é na importação de variáveis contidas num array associativo retornado pela função wddx_deserialize().

<?php

/* Suponha que $var_array é um array retornado pela função
   wddx_deserialize */

$tamanho "grande";
$var_array = array ("cor" => "azul",
                    
"tamanho"  => "medio",
                    
"forma" => "esfera");
extract ($var_arrayEXTR_PREFIX_SAME"wddx");

echo 
"$cor$tamanho$forma$wddx_tamanho\n";

?>

O exemplo acima irá imprimir:

azul, grande, esfera, medio

O $tamanho não foi sobrescrito, porque nós especificamos EXTR_PREFIX_SAME, o que resultou na criação da variável $wddx_tamanho. Se EXTR_SKIP fosse utilizado, então $wddx_tamanho não seria criada. EXTR_OVERWRITE teria feito com que $tamanho tivesse o valor "medio", e EXTR_PREFIX_ALL resultaria em novas variáveis com os nomes $wddx_cor, $wddx_tamanho, e $wddx_forma.

Notas

Aviso

Não use extract() em dados não confiáveis, como entrada de usuário ($_GET, ...). Se você por exemplo, quer executar um código antigo temporariamente com register_globals, certifique-se de que está usando um dos valores de extract_type que não fazem sobreescrita como EXTR_SKIP e tenha cuidado para que extraia na mesma ordem que é definida em variables_order no php.ini.

Veja Também


Funções para Array
PHP Manual