1

我有一串带有标签的 HTML 保存在数据库中,例如:

<p>Hello {$name}, welcome to {$shop_name}....</p>

我想用真实数据替换所有标签,现在我遍历所有可用数据并替换它是否存在。

foreach($data as $key => $data){
    $content = str_replace('{$'.$key.'}', $data, $content);
}

有没有更好的方法来做到这一点而不遍历所有的$data?现在已经增长到超过 5000 行。

我的意思是可以提取所有变量 {$name}/{$shop_name} 然后仅对找到的变量进行替换吗?

4

3 回答 3

3

你可以通过一个str_replace电话来做到这一点。

$find = array();
$replace = array();
foreach($data as $key => $data) {
    $find[] = "\{$" . $key . "}";
    $replace[] = $data;
}
$content = str_replace($find, $replace, $content);

除非存在真正的性能问题,否则我不会太担心。

于 2013-05-13T16:15:13.620 回答
1

str_replace接受数组,您可以使用 构建数组array_keysarray_values并且用户array_map可以添加{$}

$content = str_replace(
               array_map(function($e) { return '{$' . $e . '}';}, array_keys($data)),
               array_values($data),
               $content);
于 2013-05-13T16:16:21.280 回答
0

只能做

$content = preg_replace('/\{$(\w+)\}/e', '$data[\'$1\']', $content);
于 2013-05-13T16:16:12.530 回答