Solution: strpos
s'est avéré être le plus efficace. Peut être fait avec substr
mais cela crée une sous-chaîne temporaire. Peut aussi être fait avec regex, mais plus lentement que strpos et ne produit pas toujours la bonne réponse si le mot contient des méta-caractères (voir le commentaire d'Ayman Hourieh).correspondant un mot à la fin de la chaîne avec strpos
Choisi réponse:
if(strlen($str) - strlen($key) == strrpos($str,$key))
print "$str ends in $key"; // prints Oh, hi O ends in O
et mieux pour tester l'égalité stricte ===
(voir réponse David)
Merci à tous pour aider. J'essaie de faire correspondre un mot dans une chaîne pour voir si elle se produit à la fin de cette chaîne. L'habitude strpos($theString, $theWord);
ne ferait pas cela.
Fondamentalement, si $theWord = "my word";
$theString = "hello myword"; //match
$theString = "myword hello"; //not match
$theString = "hey myword hello"; //not match
Quelle serait la façon la plus efficace de le faire?
P.S. Dans le titre j'ai dit strpos
, mais si un meilleur moyen existe, c'est ok aussi.
Que voulez-vous dire par "mot"? Texte délimité par l'espace? Est-ce que la clé "foo" correspondrait à "barfoo" ou seulement à "bar foo"? –
@Nick, si '$ word =" foo ";' alors à la fois '$ phrase =" barfoo "ou" bar foo ";' devrait toujours 'match'. Ce n'est pas important dans ce cas s'il a un espace avant ou non. – clover
duplicata possible de [Quel est le test le plus efficace de savoir si une chaîne PHP se termine par une autre chaîne?] (Http://stackoverflow.com/questions/619610/whats-the-most-efficient-test-of-whether-a- php-string-ends-with-another-string) – Gajus