Necesito obtener el último carácter de una cadena. Digamos que tengo "probadores" como cadena de entrada y quiero que el resultado sea "s". ¿Cómo puedo hacer eso en PHP?
Necesito obtener el último carácter de una cadena. Digamos que tengo "probadores" como cadena de entrada y quiero que el resultado sea "s". ¿Cómo puedo hacer eso en PHP?
Respuestas:
substr("testers", -1); // returns "s"
O, para cadenas multibytes:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ) en su lugar.
O por acceso directo a la cadena :
$string[strlen($string)-1];
Tenga en cuenta que esto no funciona para cadenas multibyte. Si necesita trabajar con una cadena multibyte, considere usar la mb_*
familia de funciones de cadena.
A partir de PHP 7.1.0 también se admiten índices numéricos negativos, por ejemplo, solo $string[-1];
Desde PHP 7.1 puede hacer esto ( rfc aceptado para compensaciones de cadena negativas ):
<?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();
Te dejaré adivinar la salida.
Además, agregué esto al código de rendimiento de xenonite con estos resultados:
substr () tomó 7.0334868431091 segundos
el acceso a la matriz tomó 2.3111131191254 segundos
El acceso directo a la cadena (compensaciones de cadena negativas) tardó 1.7971360683441 segundos
No puedo dejar comentarios, pero con respecto a la respuesta de FastTrack, recuerde también que el final de línea puede ser solo un carácter. Yo sugeriría
substr(trim($string), -1)
EDITAR: Mi código a continuación fue editado por alguien, por lo que no hace lo que indiqué. He restaurado mi código original y he cambiado la redacción para que quede más claro.
trim
(o rtrim
) eliminará todos los espacios en blanco, por lo que si necesita verificar un espacio, una pestaña u otro espacio en blanco, reemplace primero manualmente las diversas terminaciones de línea:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
A partir de PHP 7.1.0, también se admiten desplazamientos de cadena negativos. Entonces, si te mantienes al día, puedes acceder al último carácter de la cadena de esta manera:
$str[-1]
A pedido de un @mickmackusa, suplemente mi respuesta con posibles formas de aplicación:
<?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)
Aconsejaría buscar la solución de Gordon, ya que es más eficiente 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();
produce algo como
----------------------------------
10000000 repetitions...
----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Recuerde, si tiene una cadena que se leyó como una línea de un archivo de texto usando la fgets()
función, debe usarla substr($string, -3, 1)
para obtener el carácter real y no parte del CRLF (Avance de línea de retorno de carro).
No creo que la persona que hizo la pregunta lo necesitara, pero para mí, estaba teniendo problemas para obtener el último carácter de una cadena de un archivo de texto, así que estoy seguro de que otros se encontrarán con problemas similares.
Puede encontrar el último carácter usando php de muchas maneras, como substr () y mb_substr () .
Si está utilizando codificaciones de caracteres multibyte como UTF-8, use mb_substr en lugar de substr
Aquí puedo mostrarles los dos ejemplos:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
Una cadena en diferentes lenguajes, incluidos C sharp y PHP, también se considera una serie de caracteres.
Sabiendo que, en teoría, las operaciones de matriz deberían ser más rápidas que las de cadena que podría hacer,
$foo = "bar";
$lastChar = strlen($foo) -1;
echo $foo[$lastChar];
$firstChar = 0;
echo $foo[$firstChar];
Sin embargo, las funciones de matriz estándar como
count();
no funcionará en una cadena.
Siemano, obtenga solo archivos php del directorio seleccionado:
$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()
útil, como se encuentra en esta biblioteca independiente .