$str
문자열 $test
이 부분 문자열로 끝나는 지 여부를 테스트하는 표준 PHP 방법 은 다음 과 같습니다.
$endsWith = substr( $str, -strlen( $test ) ) == $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;
바늘이 무엇인지 정확히 알고있는 경우에 가장 적합하므로 반대로 하드 코딩 할 수 있습니다. 프로그래밍 방식으로 바늘을 뒤집 으면 이전 방법보다 느려집니다.
답변
$endsWith = substr_compare( $str, $test, -strlen( $test ) ) === 0
음수 오프셋 “문자열 끝부터 계산 시작”.
답변
다음 strpos
은 문자열을 찾을 위치에 오프셋 을 제공 하여 한 문자열이 다른 문자열로 끝나는 지 확인하는 간단한 방법입니다 .
function stringEndsWith($whole, $end)
{
return (strpos($whole, $end, strlen($whole) - strlen($end)) !== false);
}
간단하고 PHP 4에서 작동한다고 생각합니다.
답변
어떤 종류의 효율성에 관심이 있는지에 따라 다릅니다.
귀하의 버전은 substr 사용으로 인한 추가 사본으로 인해 더 많은 메모리를 사용합니다.
대체 버전은 복사본을 만들지 않고 원래 문자열에서 하위 문자열의 마지막 발생을 검색 할 수 있지만 더 많은 테스트로 인해 속도가 느려질 수 있습니다.
아마도 가장 효율적인 방법은 문자열의 끝까지 -sterlen (test) 위치에서 char-by-char 루프를 수행하고 비교하는 것입니다. 그것은 당신이 할 수있는 최소한의 비교이며 여분의 메모리는 거의 사용되지 않습니다.
답변
또 다른 방법은 strrpos
함수 를 사용하는 것입니다 .
strrpos($str, $test) == strlen($str) - strlen($test)
그러나 그것은 빠르지 않습니다.
답변
아래 답변이 효율적이고 간단하기를 바랍니다.
$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';