Extraindo variaveis de arrays

(0 - user rating)
User Rating:  / 0
PoorBest 
Details

Fala pessoal.

Este artigo fala da função extract(), a qual pode ajudar muito a vida do programador.

Imagine a seguinte situação:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. $sql = "SELECT * FROM noticias";
  4.  
  5. $resultado = mysql_query($sql);
  6.  
  7.  
  8.  
  9. while ($linha = mysql_fetch_array($resultado)){
  10.  
  11. // para facilitar nossa vida mais adiante é claro
  12.  
  13. // que vamos querer colocar os valores retornados
  14.  
  15. // em variáveis simples:
  16.  
  17. $id = $linha['id'];
  18.  
  19. $data = $linha['data'];
  20.  
  21. $cat = $linha['cat'];
  22.  
  23. $fonte = $linha['fonte'];
  24.  
  25. $titulo = $linha['titulo'];
  26.  
  27. $status = $linha['status'];
  28.  
  29. $sumario = $linha['sumario'];
  30.  
  31.  
  32.  
  33. echo $titulo;
  34.  
  35. echo $sumario;
  36.  
  37. // ...
  38.  
  39. }
  40.  
  41. ?>

É exatamente nesse ponto que o extract() mostra a que veio. Veja:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. $sql = "SELECT * FROM noticias";
  4.  
  5. $resultado = mysql_query($sql);
  6.  
  7.  
  8.  
  9. while ($linha = mysql_fetch_array($resultado)){
  10.  
  11. extract($linha);
  12.  
  13.  
  14.  
  15. echo $titulo;
  16.  
  17. echo $sumario;
  18.  
  19. // ...
  20.  
  21. }
  22.  
  23. ?>

Vamos agora analisar a função. Começaremos pela sintaxe, que é:

Show/Hidden php code

View source
extract(array, extract_type, prefix);

array: “Sua variavel array”.
extract_type: “O modo como a variável criada será tratada”.
prefix: “Conforme o parâmetro que você fornecer em “extract_type” você pode definir um prefixo que vai anteceder as novas variáveis criadas.

Veja abaixo os parâmetros aceitos em ‘extract_type’:

EXTR_OVERWRITE
Se existir uma variável com o mesmo nome, sobrescreve a variável existente.

EXTR_SKIP
Se existir uma variável com o mesmo nome, não sobrescreve a variável existente.

EXTR_PREFIX_SAME
Se existir uma variável com o mesmo nome, 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. Essa opção foi adicionada no PHP 4.2.0.

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. Essa opção foi adicionada no PHP 4.2.0.

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. Essa opação foi adicionada no PHP 4.3.0.

Vamos agora a um exemplo prático:

Show/Hidden php code

View source
  1. <?php
  2.  
  3. extract($linha, EXTR_PREFIX_ALL, "p");
  4.  
  5. // no exemplo acima todas as variáveis terão o prefixo "p":
  6.  
  7. echo $p_titulo;
  8.  
  9. echo $p_sumario;
  10.  
  11. ?>

Show/Hidden php code

View source
  1. <?php
  2.  
  3. extract($linha, EXTR_PREFIX_SAME, "p");
  4.  
  5. //Já nesse caso terão prefixo somente as variáveis cujo nome já existia.
  6.  
  7. ?>

Agora vem o problema. E caso o array seja de índices numéricos? Nenhuma variável pode começar com número. Simples, como mostrado, podemos colocar prefixo nas variaveis que serão geradas, como o indice é numérico, vamos adicionar o prefixo a todas, da seguinte maneira:

Show/Hidden php code

View source
  1. <?php
  2.  
  3.  
  4.  
  5. $a = array(1 => 'a', 2 => 'b', 3 => 'c');
  6.  
  7. extract($a, EXTR_PREFIX_ALL, 'p');
  8.  
  9. echo $p_1, $p_2, $p_3; // Imprime abc
  10.  
  11.  
  12.  
  13. ?>

O argumento EXTR_PREFIX_ALL fará com que todas as variáveis geradas tenham um prefixo, neste caso, a letra “p” será o prefixo.

Até a próxima.Webtutoriais:A1AF8646

 

   

Login