Bir dize $str
bir alt dize ile biter olup olmadığını test etmek için standart PHP yolu $test
olduğunu:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Bu hızlı yoludur?
Ne Assaf dedi doğrudur. Tam olarak bunu yapmak için PHP, yerleşik bir işlevi vardır.
substr_compare($str, $test, -strlen($test), strlen($test)) === 0;
PHP 5.1 veya daha yüksek kullanarak değilseniz size negatif bir ofset kullanamazsınız çünkü farklı ofset biraz hesaplamak gerekir.
substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0;
$ Test uzun $ daha str PHP bir uyarı verecek, böylece ilk olduğunu kontrol etmek gerekir.
function endswith($string, $test) {
$strlen = strlen($string);
$testlen = strlen($test);
if ($testlen > $strlen) return false;
return substr_compare($string, $test, -$testlen) === 0;
}
Burada vererek, tek bir dize başka biter olup olmadığını kontrol etmek için basit bir yol strpos
bir dize bulunması gereken sağ nerede ofset:
function stringEndsWith($whole, $end)
{
return (strpos($whole, $end, strlen($whole) - strlen($end)) !== false);
}
Kolay, ve ben bu PHP 4 çalışacağız düşünüyorum.
Bu umurumda verimlilik hangi tür bağlıdır.
Sizin versiyon nedeniyle substr kullanımı ekstra kopya için daha fazla bellek kullanır.
Alternatif bir versiyonu bir kopyasını yapmadan alt dizenin son oluşumu için özgün dize arama olabilir, ama muhtemelen daha test yüzünden daha yavaş olacaktır.
Muhtemelen en verimli şekilde dizenin sonuna kadar döngü karakter-by-karakter-Sterlen itibaren (test) pozisyonunu yapmak ve karşılaştırmaktır. Yapmanız için umut olabilir karşılaştırmalar az miktarda bulunuyor ve kullanılan neredeyse herhangi bir ekstra bellek var.
Başka bir yol strrpos
fonksiyonu a> kullanmak olacaktır:
strrpos($str, $test) == strlen($str) - strlen($test)
Ama bu hızlı değil.
Ben aşağıda cevap verimli ve aynı zamanda basit olabilir umuyoruz:
$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';