在javascript中,您可以在执行字符串替换时定义返回函数:
function miniTemplate(text, data) {
return text.replace(/\{\{(.+?)\}\}/g, function(a, b) {
return typeof data[b] !== 'undefined' ? data[b] : '';
});
}
这几行代码允许我创建一个非常简洁的模板系统。正则表达式匹配文本变量中的所有“ {{something}} ”字符串,如果某事在对象数据中,则返回函数匹配,如果是,它取代了它。
所以,
text = "Hello {{var1}}, nice to meet {{var2}}";
data = { var1: "World", var2: "You" }
//result => "Hello World, nice to meet You"
我试图复制这个功能是PHP,但我想到的唯一解决方案是使用2个cicles,一个解析数据数组的每个元素,第二个解析在第一个内部查找Text内的字符串。 / p>
php中有更清洁的方法吗?
答案 0 :(得分:3)
是的,在PHP中,有一个函数preg_replace_callback()
可以传递一个函数来处理替换:
$result = preg_replace_callback('/\{\{(.+?)\}\}/', 'do_replacement', $subject);
function do_replacement($groups) {
// $groups[0] holds the entire regex match
// $groups[1] holds the match for capturing group 1
return ''; // actual program logic here
}
答案 1 :(得分:3)
您可以像使用preg_replace_callback
一样使用IDEONE demo,使用$data
关键字将preg_replace_callback
数组传递给uses
:
function miniTemplate($text, $data) {
return preg_replace_callback('~\{\{(.*?)}}~', function ($m) use ($data) {
return isset($data[$m[1]]) ? $data[$m[1]] : $m[0];
}, $text);
}
$text = "Hello {{var1}}, nice to meet {{var2}}";
$data = array("var1" => "World", "var2"=> "You");
echo miniTemplate($text, $data); // => Hello World, nice to meet You at {{var3}}
请参阅{{3}}
如果$data
中缺少值,则会在我们首先检查模板字符串是否与isset($data[$m[1]])
一起时返回。
答案 2 :(得分:2)
试试这段代码。它会明确地帮助你。
<?php
$text = "Hello {{var1}}, nice to meet {{var2}}";
$data = array("var1"=>"World","var2"=>"You");
foreach($data as $key => $value){
$text = str_replace('{{'.$key.'}}', $value, $text);
}
echo $text;
?>
答案 3 :(得分:1)
您可以使用preg_replace_callback。
代码示例:
$result = preg_replace_callback('/\{\{(.+?)\}\}/', 'replacementFunction', $subject);
function replacementFunction($groups) {
//code login here
return "value";
}
答案 4 :(得分:1)
我认为我们不需要考虑这个需求的复杂问题。如果我们试着保持简单,你可以使用sprintf函数为php格式化文本,你可以尝试下面的代码;
<?PHP
$format = "Hello %s, nice to meet %s";
$jsonData = "{\"var1\": \"World\", \"var2\": \"You\" }";
$data = json_decode($jsonData);
$result = sprintf($format,$data->var1,$data->var2);
echo $result;
?>
工作示例在这里https://ideone.com/AGNZen
答案 5 :(得分:1)
<?php
$data = array("var1" => "World", "var2" => "You");
echo "Hello {$data['var1']}, nice to meet {$data['var2']}";
?>
...重构
答案 6 :(得分:-1)
快速解决方案可能就是这个,
<?php
function ReplaceWord($find,$replace,$srcstring)
{
retrun str_replace($find,$replace,$srcstring);
}
echo ReplaceWord("WORLD","Peter","Hello world!");
?>