$str
문자열 $test
이 부분 문자열로 끝나는 지 여부를 테스트하는 표준 PHP 방법 은 다음 과 같습니다.
$endsWith = substr( $str, -strlen( $test ) ) == $test
이것이 가장 빠른 방법입니까?
s($str)->endsWith($test)
있거나 s($str)->endsWithIgnoreCase($test)
도움 이 될 수 있습니다 .
$str
문자열 $test
이 부분 문자열로 끝나는 지 여부를 테스트하는 표준 PHP 방법 은 다음 과 같습니다.
$endsWith = substr( $str, -strlen( $test ) ) == $test
이것이 가장 빠른 방법입니까?
s($str)->endsWith($test)
있거나 s($str)->endsWithIgnoreCase($test)
도움 이 될 수 있습니다 .
답변:
Assaf의 말이 맞습니다. 이를 정확히 수행하기 위해 PHP에 내장 된 함수가 있습니다.
substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0;
경우 $test
더 이상보다 $str
당신이 먼저 확인해야하므로, 경고를 줄 것이다 PHP.
function endswith($string, $test) {
$strlen = strlen($string);
$testlen = strlen($test);
if ($testlen > $strlen) return false;
return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0;
}
이 방법은 메모리가 조금 더 비싸지 만 더 빠릅니다.
stripos(strrev($haystack), $reversed_needle) === 0;
바늘이 무엇인지 정확히 알고있는 경우에 가장 적합하므로 반대로 하드 코딩 할 수 있습니다. 프로그래밍 방식으로 바늘을 뒤집 으면 이전 방법보다 느려집니다.
stripos
최악의 경우 전체 문자열을 반복하고 substr_compare
최대 바늘 길이를 비교합니다. 예, substr_compare
건초 더미 (그리고 훨씬 더 작은 바늘)의 길이를 계산해야하지만이 방법은이를 필요로 하고 전체를 복사하고 전체를 소문자로 변환하여 부팅 할 수 있습니다.
substr_compare()
잘 작동 하므로 벤치마킹 할 시간이 없습니다 .
$endsWith = substr_compare( $str, $test, -strlen( $test ) ) === 0
음수 오프셋 "문자열 끝부터 계산 시작".
어떤 종류의 효율성에 관심이 있는지에 따라 다릅니다.
귀하의 버전은 substr 사용으로 인한 추가 사본으로 인해 더 많은 메모리를 사용합니다.
대체 버전은 복사본을 만들지 않고 원래 문자열에서 하위 문자열의 마지막 발생을 검색 할 수 있지만 더 많은 테스트로 인해 속도가 느려질 수 있습니다.
아마도 가장 효율적인 방법은 문자열의 끝까지 -sterlen (test) 위치에서 char-by-char 루프를 수행하고 비교하는 것입니다. 그것은 당신이 할 수있는 최소한의 비교이며 여분의 메모리는 거의 사용되지 않습니다.
아래 답변이 효율적이고 간단하기를 바랍니다.
$content = "The main string to search";
$search = "search";
//For compare the begining string with case insensitive.
if(stripos($content, $search) === 0) echo 'Yes';
else echo 'No';
//For compare the begining string with case sensitive.
if(strpos($content, $search) === 0) echo 'Yes';
else echo 'No';
//For compare the ending string with case insensitive.
if(stripos(strrev($content), strrev($search)) === 0) echo 'Yes';
else echo 'No';
//For compare the ending string with case sensitive.
if(strpos(strrev($content), strrev($search)) === 0) echo 'Yes';
else echo 'No';
정규 표현식을 통해 확인하는 가장 쉬운 방법
예 를 들어 주어진 메일이 gmail인지 확인하려면 :
echo (preg_match("/@gmail\.com$/","example-email@gmail.com"))?'true':'false';
단일 문자 바늘의 경우 :
if (@strrev($haystack)[0] == $needle) {
// yes, it ends...
}