The extract
function of 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 extract
function creates, in the current context, a name variable equal to the key and value equal to the value. This is done by importing such variables into the current symbol table, that is, if a variable already exists with the same name, it will be overwritten.
extract_type : How 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
is EXTR_PREFIX_SAME
, EXTR_PREFIX_ALL
, EXTR_PREFIX_INVALID
or EXTR_PREFIX_IF_EXISTS
. If the name with the prefix is not a valid variable name, it is not imported into the symbol table. Prefixes are automatically separated from the array key by the underscore character.
Returns an integer value for the number of variables successfully imported into the symbol table.
In rough terms, you can say that the function equivalent is:
$data = [
"carro" => "Fiat Uno",
"ano" => "2017"
];
foreach($data as $key => $value)
{
${$key} = $value;
}
echo $carro; // Fiat Uno
echo $ano; // 2017
Calling the extract
function to the array values, as you tried to do, does not make sense. Now you've talked about replacing the values in the template. From what I understand, you would have a template like:
$template = "Meu carro é {{carro}}, ano {{ano}}";
Since {{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 doing:
echo parse($template, $data);
We would have the output: Meu carro é Fiat Uno, ano 2017
.
Note : This should not be the best way to do this, I just exemplified trying to understand if that is what it is. Because extract
would not even be necessary in this function, since it could return the direct value of the array $data
.
See working at Repl.it at Ideone and the Github Gist .