如果我在源代码中内联定义数组,则可以正常工作。但是,如何使用数据库中的var-names?
在我开发这段代码的同时,我使用了内联定义的数组。但是现在我想从数据库中获取$search
和$replace
元素。
我的问题:{var}
不再替换为$var
的值,而是替换为字符串"$var"
。
$template_tags = array(
'{order_id}',
'{customer_id}'
);
$replacements = array(
$insert_id,
$mail_customer_id
);
// works: str_replace($template_tags, $replacements, $source) is for example "The Customer 0123 has the Order-ID 0987"
但是如果我从数据库中获得了$template_tags
和$replacements
(仅var名称,则var值在源代码中之前设置),结果是:
"The Customer $mail_customer_id has the Order-ID $insert_id"
我的目标是我可以从数据库中获取var-name,然后将它们替换为-,然后再定义-值
我的数据库结果是:
Array ( [0] => {order_id}
[template_tag] => {order_id}
[1] => $order_id
[replacement] => $order_id )
Array ( [0] => {customer_id}
[template_tag] => {customer_id}
[1] => $customer_id
[replacement] => $customer_id )
编辑:
这段代码带来了我想要的结果-但看起来不太优雅,我不希望使用eval
是有风险的:
while ($value = mysqli_fetch_array($replacement_tags_query)) {
$replacements[] = $value['replacement'];
$template_tags[] = $value['template_tag'];
}
$str = str_replace($template_tags, $replacements, $testtext);
eval ("\$str = \"$str\";");
echo $str;
答案 0 :(得分:0)
请注意,您从DB返回的值是字符串:'$order_id'
,因此它们不在代码中求值。
如果要动态设置值,可以使用Environment Properties功能。因此,您所需要做的就是从数据库中删除'$'
符号,然后执行以下操作:
while ($value = mysqli_fetch_array($replacement_tags_query))
{
$replacements[] = ${$value['replacement']};
$template_tags[] = $value['template_tag'];
}
现在您可以将其用于:str_replace($template_tags, $replacements, $string)