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?
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?
Réponses:
substr("testers", -1); // returns "s"
Ou, pour les chaînes multi-octets:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ).
Ou par accès direct aux chaînes :
$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 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];
Depuis 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}; // <-- this will be deprecated in PHP 7.4
die();
Je vous laisse deviner la sortie.
Aussi, j'ai ajouté cela au code de performance de xenonite avec ces résultats:
substr () a pris 7.0334868431091secondes
l'accès à la baie a pris 2,3111131191254 secondes
L'accès direct aux chaînes (décalages de chaînes négatifs) a pris 1,7971360683441secondes
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:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
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:
$str[-1]
A la demande d'un @mickmackusa, je complète ma réponse par des modalités d'application possibles:
<?php
$str='abcdef';
var_dump($str[-2]); // => string(1) "e"
$str[-3]='.';
var_dump($str); // => string(6) "abc.ef"
var_dump(isset($str[-4])); // => bool(true)
var_dump(isset($str[-10])); // => bool(false)
Je conseillerais d'opter pour 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
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.
Vous pouvez trouver le dernier caractère en utilisant php de nombreuses façons comme substr () et mb_substr () .
Si vous utilisez des encodages 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);
?>
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,
$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.
Siemano, obtenez uniquement les fichiers php du répertoire sélectionné:
$dir = '/home/zetdoa/ftp/domeny/MY_DOMAIN/projekty/project';
$files = scandir($dir, 1);
foreach($files as $file){
$n = substr($file, -3);
if($n == 'php'){
echo $file.'<br />';
}
}
s($str)->end()
utile, comme dans cette bibliothèque autonome .