在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 中的字符串。
php 中有更干净的方法吗?
你可以像
这样使用preg_replace_callback
,就像在JavaScript中一样(使用uses
关键字将$data
数组传递给preg_replace_callback
):
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}}
查看 IDEONE 演示
如果 $data
中缺少一个值,则当我们首先检查它是否存在于isset($data[$m[1]])
时,将返回模板字符串。
是的,在 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
}
试试这段代码。 它肯定会帮助你。
<?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;
?>
您可以使用
preg_replace_callback。
代码示例 :
$result = preg_replace_callback('/'{'{(.+?)'}'}/', 'replacementFunction', $subject);
function replacementFunction($groups) {
//code login here
return "value";
}
<?php
$data = array("var1" => "World", "var2" => "You");
echo "Hello {$data['var1']}, nice to meet {$data['var2']}";
?>
重构...
我认为
我们不需要考虑这种需求的复杂性。如果我们尽量保持简单,您可以使用 php 的 sprintf 函数来格式化文本,您可以尝试下面的代码吗?
<?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
一个快速的解决方案可能是这个,
<?php
function ReplaceWord($find,$replace,$srcstring)
{
retrun str_replace($find,$replace,$srcstring);
}
echo ReplaceWord("WORLD","Peter","Hello world!");
?>