web-dev-qa-db-fra.com

Comment obtenir le dernier caractère d'une chaîne en PHP?

Je dois obtenir le dernier caractère d'une chaîne. Dites que j'ai "testeurs" comme chaîne d'entrée et que je veux que le résultat soit "s". Comment puis-je faire cela en PHP?

440
streetparade
substr("testers", -1); // returns "s"
912
Rich Adams
substr($string, -1) 
72
knittl

Ou par accès direct à la chaîne :

$string[strlen($string)-1];

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 famille de fonctions mb_*.

À partir de PHP 7.1.0, les index numériques négatifs sont également pris en charge, par exemple $string[-1];.

67
Gordon

À partir de PHP 7.1, vous pouvez le faire ( RFC accepté pour les décalages de chaîne négatifs ):

<?php
$silly = 'Mary had a little lamb';
echo $silly[-20];
echo $silly{-6};
echo $silly[-3];
echo $silly[-15];
echo $silly[-13];
echo $silly[-1];
echo $silly[-4];
echo $silly{-10};
echo $silly[-4];
echo $silly[-8];
echo $silly{3};
die();

Je vous laisse deviner le résultat.

En outre, j'ai ajouté ceci au code de performance de xenonite avec ces résultats:

substr () a pris 7.0334868431091secondes

l'accès au tableau a pris 2.3111131191254secondes

L'accès direct à la chaîne a pris 1,7971360683441secondes

34
RyanNerd

Je ne peux pas laisser de commentaires, mais en ce qui concerne la réponse de FastTrack, rappelez-vous également que la fin de ligne peut ne comporter qu'un seul caractère. je voudrais suggerer

substr(trim($string), -1)

EDIT: Mon code ci-dessous a été modifié par quelqu'un, ce qui fait qu'il ne fait pas ce que j'ai indiqué. J'ai restauré mon code d'origine et modifié le libellé pour le rendre plus clair.

trim (ou rtrim) supprimera tous les espaces , donc si vous devez vérifier l'espace, la tabulation ou autres espaces, remplacez manuellement les différentes fins de ligne en premier:

$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
16
Slashback

À partir de PHP 7.1.0, les décalages de chaîne négatifs sont également pris en charge. Donc, si vous suivez les temps, vous pouvez accéder au dernier caractère de la chaîne comme ceci:

$str[-1]

DÉMO

6
nektobit

Je conseillerais de choisir la solution de Gordon, car elle est plus performante que substr ():

<?php 

$string = 'abcdef';
$repetitions = 10000000;

echo "\n\n";
echo "----------------------------------\n";
echo $repetitions . " repetitions...\n";
echo "----------------------------------\n";
echo "\n\n";

$start = microtime(true);
for($i=0; $i<$repetitions; $i++)
    $x = substr($string, -1);

echo "substr() took " . (microtime(true) - $start) . "seconds\n";

$start = microtime(true);
for($i=0; $i<$repetitions; $i++)
    $x = $string[strlen($string)-1];

echo "array access took " . (microtime(true) - $start) . "seconds\n";

die();

sort quelque chose comme

 ---------------------------------- 
 10000000 repetitions...
 ----------------------------------

 substr() took 2.0285921096802seconds 
 array access took 1.7474739551544seconds
5
Xenonite

N'oubliez pas que si vous avez une chaîne lue sous forme de ligne à partir d'un fichier texte à l'aide de la fonction fgets(), vous devez utiliser substr($string, -3, 1) pour obtenir le caractère réel et ne pas faire partie du CRLF (Carriage). Retour à la ligne).

Je ne pense pas que la personne qui a posé la question ait besoin de cela, mais pour moi, j'avais du mal à extraire le dernier caractère d'une chaîne d'un fichier texte, donc je suis sûr que d'autres rencontreront des problèmes similaires.

4
FastTrack

Vous pouvez trouver le dernier caractère en utilisant php de nombreuses manières, comme substr () et mb_substr () .

Si vous utilisez des codages de caractères multi-octets comme UTF-8, utilisez mb_substr au lieu de substr

Ici, je peux vous montrer les deux exemples:

<?php
    echo substr("testers", -1);
    echo mb_substr("testers", -1);
?>

LIVE DEMO

2
Faisal

Une chaîne dans différentes langues, notamment 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,

$foo = "bar";


$lastChar = strlen($foo) -1;
echo $foo[$lastChar];

$firstChar = 0;
echo $foo[$firstChar];

Cependant, les fonctions de tableau standard comme

count();

ne fonctionnera pas sur une chaîne.

1
Petar Atanasov