PHP字符串是否以另一个字符串结尾的最有效测试是什么?

2022-08-30 07:05:09

测试字符串是否以子字符串结尾的标准 PHP 方法是:$str$test

$endsWith = substr( $str, -strlen( $test ) ) == $test

这是最快的方法吗?


答案 1

阿萨夫说的是正确的。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;
}

答案 2

此方法的内存成本略高,但速度更快:

stripos(strrev($haystack), $reversed_needle) === 0;

当您确切地知道针是什么时,这是最好的,因此您可以将其反向硬编码。如果以编程方式反转针头,则它比早期方法慢。

编辑(12年后):哈哈,这是一个超级古老的答案,当我不知道我到底在说什么时写的。我希望从那时起我就长大了。@DavidHarkness是正确的,但在消极的情况下它不是很有效。如果你真的需要尽可能多的性能,那么反向迭代和早期保释可能会快得多。另外,php现在可能有更好的方法来做到这一点。老实说,我已经将近十年没有写过php了,所以我现在把它留给其他人。


推荐