Javascript 用返回函数替换PHP中的字符串
在javascript中,您可以在执行字符串替换时定义返回函数:Javascript 用返回函数替换PHP中的字符串,javascript,php,regex,Javascript,Php,Regex,在javascript中,您可以在执行字符串替换时定义返回函数: function miniTemplate(text, data) { return text.replace(/\{\{(.+?)\}\}/g, function(a, b) { return typeof data[b] !== 'undefined' ? data[b] : ''; }); } 这几行代码允许我创建一个非常整洁的模板系统。正则表达式匹配文本变量中的所有“{{somethin
function miniTemplate(text, data) {
return text.replace(/\{\{(.+?)\}\}/g, function(a, b) {
return typeof data[b] !== 'undefined' ? data[b] : '';
});
}
这几行代码允许我创建一个非常整洁的模板系统。正则表达式匹配文本变量中的所有“{{something}”字符串,如果something在对象数据中,则返回函数匹配,如果在对象数据中,则替换它
所以
我试图复制这个功能的是PHP,但我想到的唯一解决方案是使用2个循环,一个解析数据数组的每个元素,另一个在第一个循环中查找文本中的字符串
php中有更干净的方法吗?您可以使用它
代码示例:
$result = preg_replace_callback('/\{\{(.+?)\}\}/', 'replacementFunction', $subject);
function replacementFunction($groups) {
//code login here
return "value";
}
我认为我们不需要考虑这一需要的复杂问题。如果我们试图保持简单,您可以使用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;
?>
工作示例如下是的,在PHP中,有一个函数
preg\u replace\u 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
}
您可以使用与JavaScript中类似的方法(使用uses
关键字将$data
数组传递给preg\u replace\u回调
):
看
如果
$data
中缺少一个值,则当我们首先检查它是否与isset($data[$m[1]])
一起出现时,将返回模板字符串。请尝试此代码。这肯定会对你有帮助
<?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;
?>
一个快速的解决方案可能就是这个
<?php
function ReplaceWord($find,$replace,$srcstring)
{
retrun str_replace($find,$replace,$srcstring);
}
echo ReplaceWord("WORLD","Peter","Hello world!");
?>
Usepreg\u replace\u callback
您是否尝试过与js相同的操作?找出双括号内的内容并进行替换?您可以根据preg_replace-callback()
:完美,我只建议您使用return(isset($data[$m[1]])更改返回行$数据[$m[1]]:'';在索引不存在的情况下,至少函数不会被更新以支持不可用的模板数据。
<?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;
?>
<?php
$data = array("var1" => "World", "var2" => "You");
echo "Hello {$data['var1']}, nice to meet {$data['var2']}";
?>
<?php
function ReplaceWord($find,$replace,$srcstring)
{
retrun str_replace($find,$replace,$srcstring);
}
echo ReplaceWord("WORLD","Peter","Hello world!");
?>