La méthode PHP standard pour tester si une chaîne $str
se termine par une sous $test
- chaîne est:
$endsWith = substr( $str, -strlen( $test ) ) == $test
Est-ce le moyen le plus rapide?
php
string
performance
Jason Cohen
la source
la source
s($str)->endsWith($test)
ous($str)->endsWithIgnoreCase($test)
utile, comme trouvé dans cette bibliothèque autonome .Réponses:
Ce qu'Assaf a dit est correct. Il existe une fonction intégrée en PHP pour faire exactement cela.
Si
$test
est plus long que$str
PHP donnera un avertissement, vous devez donc vérifier cela en premier.la source
Cette méthode est un peu plus chère en mémoire, mais elle est plus rapide:
Cela est préférable lorsque vous savez exactement ce qu'est l'aiguille, afin de pouvoir la coder en dur. Si vous inversez l'aiguille par programme, elle devient plus lente que la méthode précédente.
la source
stripos
itérera toute la chaîne dans le pire des cas alors quesubstr_compare
comparera au plus la longueur de l'aiguille. Oui,substr_compare
nécessite de calculer la longueur de la botte de foin (et de l'aiguille beaucoup plus petite), mais cette méthode nécessite cela et de la copier dans son intégralité, et éventuellement de convertir le tout en minuscules pour démarrer.substr_compare()
marche bien.Le décalage négatif "commence à compter à partir de la fin de la chaîne".
la source
Voici un moyen simple de vérifier si une chaîne se termine par une autre, en donnant
strpos
un décalage à l'endroit où la chaîne doit être trouvée:Simple, et je pense que cela fonctionnera en PHP 4.
la source
Cela dépend du type d'efficacité qui vous tient à cœur.
Votre version utilise plus de mémoire en raison de la copie supplémentaire de l'utilisation de substr.
Une version alternative pourrait rechercher dans la chaîne d'origine la dernière occurrence de la sous-chaîne sans faire de copie, mais serait probablement plus lente en raison de tests supplémentaires.
Le moyen le plus efficace est probablement de faire une boucle char-par-char de la position -sterlen (test) jusqu'à la fin de la chaîne et de comparer. C'est la quantité minimale de comparaisons que vous pouvez espérer faire et il n'y a pratiquement pas de mémoire supplémentaire utilisée.
la source
Une autre façon serait d'utiliser la
strrpos
fonction :Mais ce n'est pas plus rapide.
la source
J'espère que la réponse ci-dessous peut être efficace et aussi simple:
la source
Je ne sais pas si c'est rapide ou non, mais pour un test de caractère unique, cela fonctionne aussi:
la source
moyen le plus simple de le vérifier via une expression régulière
par exemple pour vérifier si le mail fourni est gmail:
la source
Je pense que les fonctions inverses comme strrchr () vous aideraient à faire correspondre la fin de la chaîne le plus rapidement.
la source
C'est du PHP pur, sans appeler de fonctions externes, à l'exception de strlen .
la source
pour une aiguille à un caractère:
la source