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; }
위 내용은 정규식을 사용하여 문자열 자리 표시자 대체를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!