¿Cómo obtener el último carácter de una cadena en PHP?
476
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?
Si está utilizando codificaciones de caracteres multibyte como UTF-8, use mb_substr( php.net/mb_substr ) en su lugar.
Gumbo
99
tanto para mi substr ($ string, strlen ($ string) -1, 1) ;. Parece que he tomado el camino largo!
Jeffrey
44
Solo necesita funciones de cadena multibyte si la cadena se evalúa como cadena binaria. Aka, cuando php no conoce la codificación. De lo contrario, las funciones de cadena no multibyte típicas funcionarán bien.
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];
¡Gracias por publicar puntos de referencia! Si alguien está interesado en los puntos de referencia de C # por hacer lo mismo, esta página es una buena lectura. El acceso directo al último personaje ganó.
¿podría explicar más sobre la diferencia entre [] y {} en este contexto?
Taufik Nur Rahmanda
2
@TaufikNurRahmanda Técnicamente no hay diferencia entre [] y {}. Los desarrolladores de PHP dieron la opción de usar cualquiera. Para más detalles ver: php.net/manual/en/migration71.new-features.php
RyanNerd
¿Qué es el acceso a matrices y qué es el acceso directo a cadenas? @RyanNerd afaik esas son 2 mismas cosas, ¿no?
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:
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:
El uso de compensaciones negativas fue una técnica mencionada años antes por RyanNerd. Publique una respuesta solo cuando tenga ideas únicas y valiosas para compartir.
mickmackusa
@mickmackusa ¿Por qué lo escribiste solo para mí e ignoré las múltiples variaciones substr ()?
nektobit
Nada personal, acabo de ver tu respuesta muy breve y redundante y decidí hacer sonar mi silbato. Siéntase libre de denunciar las otras respuestas si cree que no agregan ningún valor. Tenga en cuenta que dos respuestas pueden sugerir la misma técnica, pero ambas pueden ser valiosas individualmente debido a lo que se explica. Este es un lugar de educación y empoderamiento: agregar ideas únicas a las soluciones ofrecidas anteriormente puede ser bastante valioso para los investigadores.
mickmackusa
Por ejemplo, esta respuesta mía se publicó un mes después de que se publicó la misma técnica. Iba a escribir un comentario debajo de la respuesta anterior, pero a medida que escribía toda la información que quería ofrecer, obviamente era demasiado para comentar con sensatez. Publiqué una nueva respuesta y agregué muchas ideas complementarias e información de antecedentes sobre la técnica e incluí un punto de referencia. Así es como una solución no única puede ser valiosa para los investigadores.
mickmackusa
5
Aconsejaría buscar la solución de Gordon, ya que es más eficiente que substr ():
----------------------------------10000000 repetitions...----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Esto debería ser un comentario sobre la respuesta de Gordon.
Ganso
1
Puede confirmar esto. Cuanto más larga sea su cadena, mayor será la diferencia de rendimiento. En mi prueba con 10 caracteres, la substr es aproximadamente un 20% más lenta
Philipp
No es sorprendente ya que substr () tiene la sobrecarga de una llamada de función y la otra es la manipulación directa de cadenas "C like". Por cierto, ejecuté este código en PHP 7.1-dev con los resultados: substr () tomó 7.090255022049seconds \ array access tomó 2.3145787715912seconds
RyanNerd
4
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.
s($str)->end()
útil, como se encuentra en esta biblioteca independiente .Respuestas:
O, para cadenas multibytes:
fuente
mb_substr
( php.net/mb_substr ) en su lugar.fuente
O por acceso directo a la cadena :
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];
fuente
Desde PHP 7.1 puede hacer esto ( rfc aceptado para compensaciones de cadena negativas ):
Te dejaré adivinar la salida.
Además, agregué esto al código de rendimiento de xenonite con estos resultados:
fuente
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
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
(ortrim
) 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:fuente
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:
MANIFESTACIÓN
A pedido de un @mickmackusa, suplemente mi respuesta con posibles formas de aplicación:
fuente
Aconsejaría buscar la solución de Gordon, ya que es más eficiente que substr ():
produce algo como
fuente
Recuerde, si tiene una cadena que se leyó como una línea de un archivo de texto usando la
fgets()
función, debe usarlasubstr($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.
fuente
Puede encontrar el último carácter usando php de muchas maneras, como substr () y mb_substr () .
Aquí puedo mostrarles los dos ejemplos:
DEMO EN VIVO
fuente
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,
Sin embargo, las funciones de matriz estándar como
no funcionará en una cadena.
fuente
Siemano, obtenga solo archivos php del directorio seleccionado:
fuente