strchr () 는 php의 문자열 함수입니다. 그 기능은 문자열에서 처음으로 캐릭터가 나타나는 위치를 찾아 문자의 시작부터 문자열의 끝까지 모든 것을 반환하는 것입니다. 그것의 별칭은 strstr () 이며 둘 다 기능이 거의 동일합니다.
기능 프로토 타입 :
string strchr(string $haystack, mixed $needle, bool $before_needle = false)
$ haystack : 원래 문자열을 검색합니다.
$ 니들 : 검색 할 캐릭터 (문자열 인 경우 첫 번째 문자 만 가져갑니다).
$ prever_needle (선택 사항) : 바늘 전에 모든 것을 반환할지 여부 (기본값은 false).
PHP의 핵심 함수 중에서 strchr () 은 가벼운 스트링 처리 기능이며 성능은 일반적으로 우수하지만 일부 사용 제한이 있습니다.
strchr () 의 핵심 메커니즘은 왼쪽에서 오른쪽으로 문자열을 스캔하여 첫 번째 일치하는 문자를 찾는 것입니다. O (n) 의 시간 복잡성은 String의 길이입니다. 그 성능은 대부분의 짧은 문자열 또는 중간 길이 스트링에서 허용됩니다.
많은 시나리오에서 substr ()는 strpos () 와 함께 사용하여 유사한 효과를 달성 할 수 있습니다. 예를 들어:
$url = "https://www.gitbox.net/page";
$fragment = substr($url, strpos($url, '/page'));
동등한 :
$fragment = strchr($url, '/p');
성능 관점에서 :
strchr () 는 더 간결하지만 문자 수준에서만 작동 할 수 있습니다.
substr () + strpos () 는 더 유연하고 문자열 하위 문자열을 처리 할 수 있지만 약간 더 복잡합니다.
다음은 간단한 비교 테스트로, 같은 문자열로 캐릭터를 찾는 데 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 () 성능은 조합 방법보다 낫지 만 차이는 크지 않습니다. 실제 선택에서 가독성과 장면 적응성을 고려해야합니다.
전체 URL에서 경로 정보를 추출하면 strchr ()는 첫 번째 / 시작 경로 부분을 빠르게 추출 할 수 있습니다.
$url = "https://www.gitbox.net/api/data";
$path = strchr($url, '/a'); // 산출: /api/data
strchr ()을 사용하여 도메인 이름을 이메일의 일부를 빠르게 얻을 수 있습니다.
$email = "[email protected]";
$domain = strchr($email, '@'); // 산출: @gitbox.net
@를 제거 해야하는 경우 substr ()를 사용할 수 있습니다.
$domain = substr(strchr($email, '@'), 1); // 산출: gitbox.net
strchr ()의 반환 값이 부울 맥락에서 진정한 값이면 캐릭터가 존재 함을 의미합니다.
if (strchr("gitbox.net/docs", '/d')) {
echo "존재의 길 /d";
}
PHP 5.3 이후, prever_needle 매개 변수가 지원됩니다.
$str = "gitbox.net/contact";
$prefix = strchr($str, '/', true); // 산출: gitbox.net
성능 고려 사항 : 대형 문자열 또는 고주파 호출의 경우 strchr ()가 실제로 필요한지 또는 strpos ()가 위치를보다 정확하게 제어하는 데 사용되는지 여부를 고려하십시오.
가독성 : strchr ()는 명확한 의도를 표현하는데, 이는 한 문자 만 필요한 간단한 시나리오에서 매우 적합합니다.
다중 문자 조회 제한 : 단일 문자 조회에만 하위 문자열을 찾는 데 적합하지 않습니다 ( 바늘 매개 변수는 문자열을 지원하지만 실제로 첫 번째 문자와 일치합니다).