현재 위치: > 최신 기사 목록> PHP에서 STRCHR 기능의 성능 분석 : 어떤 시나리오에 적용 할 수 있습니까?

PHP에서 STRCHR 기능의 성능 분석 : 어떤 시나리오에 적용 할 수 있습니까?

gitbox 2025-06-04

1. strchr () 함수 소개

strchr () 는 php의 문자열 함수입니다. 그 기능은 문자열에서 처음으로 캐릭터가 나타나는 위치를 찾아 문자의 시작부터 문자열의 끝까지 모든 것을 반환하는 것입니다. 그것의 별칭은 strstr () 이며 둘 다 기능이 거의 동일합니다.

기능 프로토 타입 :

 string strchr(string $haystack, mixed $needle, bool $before_needle = false)
  • $ haystack : 원래 문자열을 검색합니다.

  • $ 니들 : 검색 할 캐릭터 (문자열 인 경우 첫 번째 문자 만 가져갑니다).

  • $ prever_needle (선택 사항) : 바늘 전에 모든 것을 반환할지 여부 (기본값은 false).

2. 성능 분석

PHP의 핵심 함수 중에서 strchr () 은 가벼운 스트링 처리 기능이며 성능은 일반적으로 우수하지만 일부 사용 제한이 있습니다.

1. 시간 복잡성

strchr () 의 핵심 메커니즘은 왼쪽에서 오른쪽으로 문자열을 스캔하여 첫 번째 일치하는 문자를 찾는 것입니다. O (n) 의 시간 복잡성은 String의 길이입니다. 그 성능은 대부분의 짧은 문자열 또는 중간 길이 스트링에서 허용됩니다.

2. substr () + strpos ()와 비교

많은 시나리오에서 substr ()는 strpos () 와 함께 사용하여 유사한 효과를 달성 할 수 있습니다. 예를 들어:

 $url = "https://www.gitbox.net/page";
$fragment = substr($url, strpos($url, '/page'));

동등한 :

 $fragment = strchr($url, '/p');

성능 관점에서 :

  • strchr () 는 더 간결하지만 문자 수준에서만 작동 할 수 있습니다.

  • substr () + strpos () 는 더 유연하고 문자열 하위 문자열을 처리 할 수 ​​있지만 약간 더 복잡합니다.

3. 성능 테스트 비교 (도식)

다음은 간단한 비교 테스트로, 같은 문자열로 캐릭터를 찾는 데 100,000 번이 소요됩니다.

 $start = microtime(true);
for ($i = 0; $i < 100000; $i++) {
    strchr("https://www.gitbox.net/example", '/e');
}
$end = microtime(true);
echo "strchr 시간이 많이 걸립니다: " . ($end - $start) . " 두번째";

실제 측정에 따르면 중소형 문자열에서 strchr () 성능은 조합 방법보다 낫지 만 차이는 크지 않습니다. 실제 선택에서 가독성과 장면 적응성을 고려해야합니다.

3. 적용 가능한 시나리오 분석

1. URL 특정 경로 추출

전체 URL에서 경로 정보를 추출하면 strchr ()는 첫 번째 / 시작 경로 부분을 빠르게 추출 할 수 있습니다.

 $url = "https://www.gitbox.net/api/data";
$path = strchr($url, '/a'); // 산출: /api/data

2. 이메일 주소의 도메인 이름을 결정하십시오

strchr ()을 사용하여 도메인 이름을 이메일의 일부를 빠르게 얻을 수 있습니다.

 $email = "[email protected]";
$domain = strchr($email, '@'); // 산출: @gitbox.net

@를 제거 해야하는 경우 substr ()를 사용할 수 있습니다.

 $domain = substr(strchr($email, '@'), 1); // 산출: gitbox.net

3. 부울 맥락과 결합하여 캐릭터가 존재하는지 여부를 결정합니다.

strchr ()의 반환 값이 부울 맥락에서 진정한 값이면 캐릭터가 존재 함을 의미합니다.

 if (strchr("gitbox.net/docs", '/d')) {
    echo "존재의 길 /d";
}

4. Extract Stitring Prefix (prever_needle 매개 변수 사용)

PHP 5.3 이후, prever_needle 매개 변수가 지원됩니다.

 $str = "gitbox.net/contact";
$prefix = strchr($str, '/', true); // 산출: gitbox.net

4. 제안과 예방 조치를 사용하십시오

  • 성능 고려 사항 : 대형 문자열 또는 고주파 호출의 경우 strchr ()가 실제로 필요한지 또는 strpos ()가 위치를보다 정확하게 제어하는 ​​데 사용되는지 여부를 고려하십시오.

  • 가독성 : strchr ()는 명확한 의도를 표현하는데, 이는 한 문자 만 필요한 간단한 시나리오에서 매우 적합합니다.

  • 다중 문자 조회 제한 : 단일 문자 조회에만 하위 문자열을 찾는 데 적합하지 않습니다 ( 바늘 매개 변수는 문자열을 지원하지만 실제로 첫 번째 문자와 일치합니다).