Optimizing String Placeholder Substitution with RegEx
The function dynStr() aims to search for and replace placeholder variables in a given string, denoted by curly brackets. While it functions correctly, its efficiency and simplicity can be improved.
One key issue with dynStr() lies in its double-array structure for $matches. Using two foreach loops to access the desired data is inefficient. Consider simplifying the regular expression to directly extract the placeholder variable without the need for further processing:
preg_match_all('/{\w }/', $str, $matches);
Next, the loop to replace the placeholder variables can be optimized. The current approach uses several string manipulation operations and array lookups, making it unnecessarily complex:
foreach($match_group as $match) { // ... $str = ... }
A simpler and more concise alternative is to use a single function call, substituting the placeholder directly:
foreach($matches[0] as $match) { $str = strtr($str, [$match => $vars[strtolower($match)]]); }
The strtr() function efficiently performs multiple replacements by defining a mapping between the placeholder variables and their corresponding values in the $vars array.
Additionally, the function can be made case-insensitive by converting both the placeholder variables and the array keys to lowercase, eliminating the need for additional processing:
$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);
Incorporating these optimizations results in a more efficient and streamlined dynStr() function:
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; }
Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.
Copyright© 2022 湘ICP备2022001581号-3