gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:44:51 25 4
gpt4 key购买 nike

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

function miniTemplate(text, data) { 
return text.replace(/\{\{(.+?)\}\}/g, function(a, b) {
return typeof data[b] !== 'undefined' ? data[b] : '';
});
}

这几行代码使我能够创建一个非常简洁的模板系统。正则表达式匹配文本变量内的所有“{{something}}”字符串,如果 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 demo

如果 $data 中缺少一个值,模板字符串将被返回,因为我们首先检查它是否存在 isset($data[$m[1]]).

关于javascript - 用返回函数替换PHP中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35035498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com