使用 RegEx 优化字符串占位符替换
函数 dynStr() 旨在搜索并替换给定字符串中的占位符变量,表示为大括号。虽然它的功能正确,但它的效率和简单性还可以提高。
dynStr() 的一个关键问题在于它的 $matches 的双数组结构。使用两个 foreach 循环来访问所需的数据效率很低。考虑简化正则表达式,直接提取占位符变量,无需进一步处理:
preg_match_all('/{\w }/', $str, $matches);
接下来,可以优化替换占位符变量的循环。当前的方法使用多个字符串操作操作和数组查找,使其变得不必要的复杂:
foreach($match_group as $match) { // ... $str = ... }
更简单、更简洁的替代方法是使用单个函数调用,直接替换占位符:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
strtr() 函数通过定义占位符变量与其在 $vars 数组中的相应值之间的映射来有效地执行多次替换。
此外,该函数可以不区分大小写通过将占位符变量和数组键都转换为小写,消除了额外处理的需要:
$allowed = array_keys(array_change_key_case($vars, CASE_LOWER)); ... $str = (in_array(strtolower($match), $allowed)) ? str_replace("{".$match_up."}", $vars[strtolower($match)], $str) : str_replace("{".$match_up."}", '', $str);
合并这些优化会产生更高效、更精简的 dynStr() 函数:
function dynStr($str,$vars) { preg_match_all('/{\w }/', $str, $matches); foreach($matches[0] as $match) { $vars = array_change_key_case($vars, CASE_LOWER); $str = strtr($str, [$match => $vars[strtolower($match)]]); } return $str; }
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3