Le standard de PHP façon de tester si une chaîne de caractères $str
se termine par une sous-chaîne de caractères $test
est:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Est-ce le moyen le plus rapide?
Le standard de PHP façon de tester si une chaîne de caractères $str
se termine par une sous-chaîne de caractères $test
est:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Est-ce le moyen le plus rapide?
Ce Assaf a dit est correct. Il est construit en fonction en PHP pour faire exactement cela.
substr_compare($str, $test, strlen($str)-strlen($test), strlen($test)) === 0;
Si $test
est plus que $str
PHP va donner un avertissement, de sorte que vous devez vérifier que le premier.
function endswith($string, $test) {
$strlen = strlen($string);
$testlen = strlen($test);
if ($testlen > $strlen) return false;
return substr_compare($string, $test, $strlen - $testlen, $testlen) === 0;
}
Cette méthode est un tout petit peu plus de mémoire-cher, mais c'est plus rapide:
stripos(strrev($haystack), $reversed_needle) === 0;
C'est mieux quand vous savez exactement ce que l'aiguille, de sorte que vous pouvez coder en dur elle a renversé. Si vous inversez l'aiguille par programmation, il devient plus lente que la méthode antérieure.
Voici une méthode simple pour vérifier si une chaîne de caractères se termine avec une autre, en donnant des strpos
d'un décalage à droite, où la chaîne doit être trouvé:
function stringEndsWith($whole, $end)
{
return (strpos($whole, $end, strlen($whole) - strlen($end)) !== false);
}
Simple, et je pense que c'vais travailler dans PHP 4.
Cela dépend de la sorte de l'efficacité des soins.
Votre version utilise plus de mémoire en raison de la copie supplémentaire de l'utilisation de substr.
Une version alternative peut rechercher la chaîne d'origine de la dernière occurrence de la sous-chaîne sans en faire une copie, mais serait probablement plus lent en raison de plus de tests.
Probablement le moyen le plus efficace est de faire la boucle de char par char de l'-sterlen(test) poste jusqu'à la fin de la chaîne et de les comparer. C'est le montant minimal de comparaisons que vous pouvez espérer de le faire et il n'y a guère plus de mémoire utilisée.
Un autre moyen serait d'utiliser l' strrpos
fonction de:
strrpos($str, $test) == strlen($str) - strlen($test)
Mais ce n'est pas plus rapide.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.