PHP字符串是否以另一个字符串结尾的最有效测试是什么?
2022-08-30 07:05:09
测试字符串是否以子字符串结尾的标准 PHP 方法是:$str
$test
$endsWith = substr( $str, -strlen( $test ) ) == $test
这是最快的方法吗?
测试字符串是否以子字符串结尾的标准 PHP 方法是:$str
$test
$endsWith = substr( $str, -strlen( $test ) ) == $test
这是最快的方法吗?
阿萨夫说的是正确的。PHP中有一个内置函数可以做到这一点。
substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0;
如果比PHP长,则会给出警告,因此您需要先检查一下。$test
$str
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;
当您确切地知道针是什么时,这是最好的,因此您可以将其反向硬编码。如果以编程方式反转针头,则它比早期方法慢。
编辑(12年后):哈哈,这是一个超级古老的答案,当我不知道我到底在说什么时写的。我希望从那时起我就长大了。@DavidHarkness是正确的,但在消极的情况下它不是很有效。如果你真的需要尽可能多的性能,那么反向迭代和早期保释可能会快得多。另外,php现在可能有更好的方法来做到这一点。老实说,我已经将近十年没有写过php了,所以我现在把它留给其他人。