Cómo obtener el último carácter de un string en PHP: 5 métodos comprobados

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo obtener el último carácter de un string en PHP: guía completa para principiantes y expertos

\n\n

Imagina esta situación: estás escribiendo un script que debe verificar si un correo electrónico termina en @gmail.com, o necesitas extraer la última letra del nombre de un usuario. Parece una tarea sencilla: obtener el último carácter de un string en PHP. ¡Pero no te confíes! Incluso en un problema tan simple hay trampas ocultas, especialmente cuando hablamos de español con tildes, emojis o caracteres especiales.

\n\n

Según datos de Stack Overflow, la pregunta "How to get the last char of a string in PHP?" acumula miles de visitas cada mes. Y no es casualidad: los principiantes suelen tropezar con substr() usando índices negativos, mientras que los desarrolladores experimentados debaten sobre rendimiento y compatibilidad con UTF-8.

\n\n

En este artículo analizaremos 5 métodos funcionales, mostraremos ejemplos reales de código y daremos recomendaciones claras. ¡Empecemos!

\n\n

Método #1: El clásico — substr() con índice negativo

\n\n

La forma más popular y concisa. La función substr() acepta un valor negativo en la longitud para contar caracteres desde el final del string.

\n\n
<?php\n$string = "Hola, Mundo!";\n$lastChar = substr($string, -1);\necho $lastChar; // Muestra: !\n?>
\n\n

Ventajas:

\n
    \n
  • Corto y fácil de entender
  • \n
  • Rápido en ejecución
  • \n
\n\n

Desventajas:

\n
    \n
  • No soporta codificaciones multibyte (tildes, eñes, caracteres chinos)
  • \n
  • Puede devolver un carácter "roto" para strings UTF-8
  • \n
\n\n

Ejemplo del problema con caracteres acentuados:

\n\n
<?php\n$string = "Canción";\n$lastChar = substr($string, -1);\necho $lastChar; // Muestra: � (signo de interrogación en rombo)\n?>
\n\n

¿Por qué ocurre esto? Porque letras como la "ó" ocupan 2 bytes en UTF-8, y substr() trabaja con bytes, no con caracteres. Para texto en inglés este método es ideal, pero para proyectos multilingües no lo es.

\n\n

Método #2: El correcto — mb_substr() para strings multibyte

\n\n

Si tu proyecto trabaja con Unicode (hoy en día es prácticamente obligatorio), usa mb_substr() de la extensión mbstring.

\n\n
<?php\n$string = "¡Hola, mundo!";\n$lastChar = mb_substr($string, -1);\necho $lastChar; // Muestra: !\n?>
\n\n

Y ahora lo más interesante: trabajar con emojis:

\n\n
<?php\n$string = "👋 Hola 🌍";\n$lastChar = mb_substr($string, -1);\necho $lastChar; // Muestra: 🌍\n?>
\n\n

Ventajas:

\n
    \n
  • Maneja correctamente cualquier codificación (UTF-8, UTF-16, etc.)
  • \n
  • Funciona con emojis y caracteres especiales
  • \n
\n\n

Desventajas:

\n
    \n
  • Requiere la extensión mbstring instalada (presente en casi todos los hosting)
  • \n
  • Un poco más lento que substr()
  • \n
\n\n

Método #3: Alternativa — str_split() y end()

\n\n

Puedes dividir el string en un array de caracteres y tomar el último elemento. Se ve elegante, pero tiene un detalle.

\n\n
<?php\n$string = "PHP";\n$chars = str_split($string);\n$lastChar = end($chars);\necho $lastChar; // Muestra: P\n?>
\n\n

Atención: str_split() tampoco funciona bien con strings multibyte. Para caracteres acentuados o eñes, debes usar preg_split() con el flag Unicode:

\n\n
<?php\n$string = "Código";\n$chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);\n$lastChar = end($chars);\necho $lastChar; // Muestra: o\n?>
\n\n

Ventajas:

\n
    \n
  • Código intuitivo y fácil de leer
  • \n
  • Puedes obtener fácilmente no solo el último, sino cualquier carácter
  • \n
\n\n

Desventajas:

\n
    \n
  • Consume más memoria (se crea un array)
  • \n
  • Más lento que las funciones directas
  • \n
\n\n

Método #4: Avanzado — iconv_substr() para codificaciones específicas

Blogs

Book Recommendations