Comment obtenir le dernier caractère d'une chaîne en PHP?
476
J'ai besoin d'obtenir le dernier caractère d'une chaîne. Disons que j'ai des "testeurs" comme chaîne d'entrée et que je veux que le résultat soit "s". comment puis-je faire cela en PHP?
Si vous utilisez des encodages de caractères multi-octets comme UTF-8, utilisez plutôtmb_substr ( php.net/mb_substr ).
Gumbo
9
tant pour mon substr ($ string, strlen ($ string) -1, 1) ;. On dirait que j'ai pris le LONG chemin!
jeffkee
4
Vous n'avez besoin de fonctions de chaîne multi-octets que si la chaîne est évaluée en tant que chaîne binaire. Aka, quand php ne connaît pas l'encodage. Sinon, les fonctions de chaîne non multioctets typiques fonctionneront très bien.
Notez que cela ne fonctionne pas pour les chaînes multi-octets. Si vous devez travailler avec une chaîne multi-octets, envisagez d'utiliser la mb_*famille de fonctions chaîne.
Depuis PHP 7.1.0, les indices numériques négatifs sont également pris en charge, par exemple juste $string[-1];
Merci d'avoir publié des repères! Si quelqu'un s'intéresse aux benchmarks C # pour faire la même chose, cette page est une bonne lecture. L'accès direct au dernier personnage l'a emporté.
pourriez-vous expliquer davantage la différence entre [] et {} dans ce contexte?
Taufik Nur Rahmanda
2
@TaufikNurRahmanda Techniquement, il n'y a pas de différence entre [] et {}. Les développeurs PHP ont donné la possibilité d'utiliser l'un ou l'autre. Pour plus de détails, voir: php.net/manual/en/migration71.new-features.php
RyanNerd
qu'est-ce que l'accès aux tableaux et qu'est-ce que l'accès direct aux chaînes? @RyanNerd afaik ce sont 2 mêmes choses, non?
Je ne peux pas laisser de commentaires, mais en ce qui concerne la réponse de FastTrack, rappelez-vous également que la fin de la ligne peut ne comporter qu'un seul caractère. je voudrais suggerer
substr(trim($string),-1)
EDIT: Mon code ci-dessous a été édité par quelqu'un, ce qui ne fait pas ce que j'ai indiqué. J'ai restauré mon code d'origine et changé le libellé pour le rendre plus clair.
trim(ou rtrim) supprimera tous les espaces, donc si vous avez besoin de rechercher un espace, une tabulation ou un autre espace, remplacez d'abord manuellement les différentes fins de ligne:
Depuis PHP 7.1.0, les décalages de chaîne négatifs sont également pris en charge. Donc, si vous suivez l'heure, vous pouvez accéder au dernier caractère de la chaîne comme ceci:
L'utilisation de compensations négatives était une technique mentionnée des années plus tôt par RyanNerd. Veuillez publier une réponse uniquement lorsque vous avez des informations uniques et précieuses à partager.
mickmackusa
@mickmackusa Pourquoi ne l'avez-vous écrit que pour moi et ignoré les multiples variations substr ()?
nektobit
Rien de personnel, je viens de voir votre réponse très courte et redondante et j'ai décidé de siffler. N'hésitez pas à dénoncer les autres réponses si vous pensez qu'elles n'apportent aucune valeur. Gardez à l'esprit que deux réponses peuvent suggérer la même technique, mais les deux ont une valeur individuelle en raison de ce qui est expliqué. C'est un lieu d'éducation et d'autonomisation - l'ajout de perspectives uniques aux solutions précédemment proposées peut être très précieux pour les chercheurs.
mickmackusa
Par exemple, ma réponse a été publiée un mois après la publication de la même technique. J'allais écrire un commentaire sous la réponse précédente, mais comme j'ai tapé toutes les informations que je voulais offrir, c'était évidemment trop pour commenter de manière sensée. J'ai posté une nouvelle réponse et ajouté de nombreuses informations complémentaires et des informations de base concernant la technique et inclus une référence. C'est ainsi qu'une solution non unique peut être utile aux chercheurs.
mickmackusa
5
Je conseillerais d'opter pour la solution de Gordon car elle est plus performante que substr ():
----------------------------------10000000 repetitions...----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Cela devrait être un commentaire sur la réponse de Gordon.
Goose
1
Je peux le confirmer. Plus votre chaîne est longue, plus la différence de performance est grande. Dans mon test avec 10 caractères, le substrat est environ 20% plus lent
Philipp
Pas surprenant car substr () a la surcharge d'un appel de fonction et l'autre est une manipulation de chaîne directe de type "C". BTW J'ai exécuté ce code sur PHP 7.1-dev avec les résultats: substr () a pris 7.090255022049seconds \ array access a pris 2.3145787715912seconds
RyanNerd
4
Rappelez-vous, si vous avez une chaîne qui a été lue comme une ligne d'un fichier texte à l'aide de la fgets()fonction, vous devez utilisersubstr($string, -3, 1) pour obtenir le caractère réel et ne pas faire partie du CRLF (Carriage Return Line Feed).
Je ne pense pas que la personne qui a posé la question en ait eu besoin, mais pour moi, j'avais du mal à obtenir ce dernier caractère d'une chaîne à partir d'un fichier texte, donc je suis sûr que d'autres rencontreront des problèmes similaires.
s($str)->end()
utile, comme dans cette bibliothèque autonome .Réponses:
Ou, pour les chaînes multi-octets:
la source
mb_substr
( php.net/mb_substr ).la source
Ou par accès direct aux chaînes :
Notez que cela ne fonctionne pas pour les chaînes multi-octets. Si vous devez travailler avec une chaîne multi-octets, envisagez d'utiliser la
mb_*
famille de fonctions chaîne.Depuis PHP 7.1.0, les indices numériques négatifs sont également pris en charge, par exemple juste
$string[-1];
la source
Depuis PHP 7.1, vous pouvez le faire ( rfc accepté pour les décalages de chaîne négatifs ):
Je vous laisse deviner la sortie.
Aussi, j'ai ajouté cela au code de performance de xenonite avec ces résultats:
la source
Je ne peux pas laisser de commentaires, mais en ce qui concerne la réponse de FastTrack, rappelez-vous également que la fin de la ligne peut ne comporter qu'un seul caractère. je voudrais suggerer
EDIT: Mon code ci-dessous a été édité par quelqu'un, ce qui ne fait pas ce que j'ai indiqué. J'ai restauré mon code d'origine et changé le libellé pour le rendre plus clair.
trim
(ourtrim
) supprimera tous les espaces, donc si vous avez besoin de rechercher un espace, une tabulation ou un autre espace, remplacez d'abord manuellement les différentes fins de ligne:la source
Depuis PHP 7.1.0, les décalages de chaîne négatifs sont également pris en charge. Donc, si vous suivez l'heure, vous pouvez accéder au dernier caractère de la chaîne comme ceci:
DEMO
A la demande d'un @mickmackusa, je complète ma réponse par des modalités d'application possibles:
la source
Je conseillerais d'opter pour la solution de Gordon car elle est plus performante que substr ():
sort quelque chose comme
la source
Rappelez-vous, si vous avez une chaîne qui a été lue comme une ligne d'un fichier texte à l'aide de la
fgets()
fonction, vous devez utilisersubstr($string, -3, 1)
pour obtenir le caractère réel et ne pas faire partie du CRLF (Carriage Return Line Feed).Je ne pense pas que la personne qui a posé la question en ait eu besoin, mais pour moi, j'avais du mal à obtenir ce dernier caractère d'une chaîne à partir d'un fichier texte, donc je suis sûr que d'autres rencontreront des problèmes similaires.
la source
Vous pouvez trouver le dernier caractère en utilisant php de nombreuses façons comme substr () et mb_substr () .
Ici, je peux vous montrer les deux exemples:
DÉMO EN DIRECT
la source
Une chaîne dans différents langages, y compris C sharp et PHP est également considérée comme un tableau de caractères.
Sachant qu'en théorie, les opérations sur les tableaux devraient être plus rapides que celles que vous pourriez faire avec des chaînes,
Cependant, les fonctions de tableau standard comme
ne fonctionnera pas sur une chaîne.
la source
Siemano, obtenez uniquement les fichiers php du répertoire sélectionné:
la source