The function extract
, PHP, has the following syntax:
int extract ( array $var_array [, int $extract_type [, string $prefix ]] )
Parameters:
$var_array: a variable of type array associative. For each key/value pair, the function extract
creates, in the current context, a name variable equal to the key and value equal to the value. This occurs by importing such variables into the current symbol table, i.e., if a variable already exists with the same name, it will be overwritten.
extract_type: How the new variables will be validated and/or treated:
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.
If extract_type is not specified, the value EXTR_OVERWRITE is assumed.
prefix: Note that prefix is only required if extract_type
for EXTR_PREFIX_SAME
, EXTR_PREFIX_ALL
, EXTR_PREFIX_INVALID
or EXTR_PREFIX_IF_EXISTS
. If the prefixed name is not a valid variable name, it will not be imported into the symbol table. Prefixes are automatically separated from the array key by the underscore character.
Returns an integer value referring to the number of variables successfully imported into the symbol table.
Roughly speaking, one can say that the equivalent of the function is:
$data = [
"carro" => "Fiat Uno",
"ano" => "2017"
];
foreach($data as $key => $value)
{
${$key} = $value;
}
echo $carro; // Fiat Uno
echo $ano; // 2017
Call the function extract
for the array values, as you tried to do, it doesn’t make any sense. Now, you talked about replacing the values in the template. From what I understand, you would have a template like:
$template = "Meu carro é {{carro}}, ano {{ano}}";
Whereas {{carro}}
and {{ano}}
would be replaced by values in variables. If so, you can do something like:
function parse ($template, array $vars)
{
return preg_replace_callback('#{{(.*?)}}#', function($match) use ($vars) {
extract($vars);
return ${$match[1]};
}, $template);
}
And making:
echo parse($template, $data);
We’d have the way out: Meu carro é Fiat Uno, ano 2017
.
Note: It should not be the best way to do this, I just exemplified trying to understand if this is your need. Up because the extract
nor would be necessary in this function, because it could return the direct value of the array $data
.
See working on Repl.it, in the Ideone and in the Github Gist.
Because you need the
extract()
?– rray
I’ll use it for uploading html templates. foreach will subtitle links in tpl’s by the names of variables coming from Extract. Variables and links need to have the same name, as this will become a dynamic function, where php automatically replaces the link in tpl with the variable of the same name, without I need to manually set.
– Seu Madruga
foreach($dados as $k => $v){ extract($dados[$k]);}
this gives the desired result?– rray
No, the error persists.
– Seu Madruga
Do the
foreach
andextract
in each value would "produce" the same result as using theextract
in the array. I don’t understand what the purpose of this is.– Woss