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