end
in_array
Funções para Array
PHP Manual

# extract

(PHP 4, PHP 5)

extract — Importa 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.

### Histórico

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_array, EXTR_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

- compact() - Cria um array contendo variáveis e seus valores

end
in_array
Funções para Array
PHP Manual