我在数据库中保存了一个带有标签的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}然后只对找到的变量进行替换?
答案 0 :(得分:3)
你可以通过一次str_replace
电话来完成。
$find = array();
$replace = array();
foreach($data as $key => $data) {
$find[] = "\{$" . $key . "}";
$replace[] = $data;
}
$content = str_replace($find, $replace, $content);
除非出现真正的性能问题,否则我不会太担心。
答案 1 :(得分:1)
str_replace
接受数组,您可以使用array_keys
,array_values
和用户array_map
构建数组,以添加{$}
$content = str_replace(
array_map(function($e) { return '{$' . $e . '}';}, array_keys($data)),
array_values($data),
$content);
答案 2 :(得分:0)
可以做到
$content = preg_replace('/\{$(\w+)\}/e', '$data[\'$1\']', $content);