Javascript 用返回函数替换PHP中的字符串

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

在javascript中,您可以在执行字符串替换时定义返回函数:

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!");

?>


Use
preg\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!");

?>