提取括号内的所有内容

时间:2013-05-13 16:12:22

标签: php

我在数据库中保存了一个带有标签的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}然后只对找到的变量进行替换?

3 个答案:

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