将数据库中的数组用于str_replace($ search,$ replace,$ string)-具有动态值

时间:2019-01-22 09:40:25

标签: php mysql arrays str-replace

如果我在源代码中内联定义数组,则可以正常工作。但是,如何使用数据库中的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;

1 个答案:

答案 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)