Оптимизация замены заполнителя строки с помощью 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