PHP 模板字符串中的字段替换
/**
* note: 字符串中的模板变量替换
* @auther: kinra
* @time: 2024/8/8
* @param string $content
* @param array $params
* @param string $paramsPatternRegex
* @param string $templateFieldPrefix
* @param string $templateFieldSuffix
* @return string
*/
function replaceStrContent(
string $content,
array $params,
string $paramsPatternRegex = '/\${[a-zA-Z0-9_]*}/',
string $templateFieldPrefix = '${',
string $templateFieldSuffix = '}'
): string {
$numericalParamsDealFun = function ($content, $params) use ($paramsPatternRegex) {
$matches = [];
preg_match_all($paramsPatternRegex, $content, $matches);
return str_replace($matches[0], $params, $content);
};
$replace = [];
foreach ($params as $key => $val) {
$replace[$templateFieldPrefix . $key . $templateFieldSuffix] = $val;
}
$replacedContent = strtr($content, $replace);
if ($replacedContent !== $content) {
$content = $replacedContent;
} else {
$content = $numericalParamsDealFun($content, $params);
}
return $content;
}
函数输出示例
$content = '你好, ${name}, 很高兴在 ${date} 这一天在 ${where} 见到你。';
$conten2 = '你好, :<name>, 很高兴在 :<date> 这一天在 :<where> 见到你。';
$params = ['name' => '张三', 'date' => '2024-09-01', 'where' => '上海'];
echo replaceStrContent($content, $params) . PHP_EOL;
// 输出:你好, 张三, 很高兴在 2024-09-01 这一天在 上海 见到你。
echo replaceStrContent($content, array_values($params)) . PHP_EOL;
// 输出:你好, 张三, 很高兴在 2024-09-01 这一天在 上海 见到你。
echo replaceStrContent($conten2, $params, '/:<[a-zA-Z0-9_]*>/') . PHP_EOL;
// 输出:你好, 张三, 很高兴在 2024-09-01 这一天在 上海 见到你。