Último caractere de string em PHP: 5 métodos comprovados

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Como obter o último caractere de uma string em PHP: guia completo para iniciantes e profissionais

\n\n

Imagine a seguinte situação: você está escrevendo um script que precisa verificar se um e-mail termina com @gmail.com, ou precisa extrair a última letra do nome de um usuário. Parece uma tarefa elementar — pegar o último caractere de uma string em PHP. Mas não é bem assim! Mesmo nessa questão simples, existem várias armadilhas, especialmente quando lidamos com português, emojis ou caracteres especiais.

\n\n

De acordo com dados do Stack Overflow, a pergunta "How to get the last char of a string in PHP?" acumula milhares de visualizações todos os meses. E não é à toa: iniciantes frequentemente tropeçam no substr() com índices negativos, enquanto desenvolvedores experientes debatem sobre desempenho e funcionamento correto com UTF-8.

\n\n

Neste artigo, vamos explorar 5 métodos funcionais, mostrar exemplos reais de código e dar recomendações claras. Vamos nessa!

\n\n

Método #1: O clássico — substr() com índice negativo

\n\n

O método mais popular e conciso. A função substr() aceita um valor negativo de comprimento para contar caracteres a partir do final da string.

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

Vantagens:

\n
    \n
  • Curto e direto
  • \n
  • Rápido na execução
  • \n
\n\n

Desvantagens:

\n
    \n
  • Não suporta codificações multibyte (acentuação, caracteres chineses)
  • \n
  • Pode retornar um caractere "quebrado" para strings UTF-8
  • \n
\n\n

Exemplo do problema com acentos:

\n\n
<?php\n$string = "Ação";\n$lastChar = substr($string, -1);\necho $lastChar; // Exibe: � (ponto de interrogação em losango)\n?>
\n\n

Por que isso acontece? Porque letras acentuadas ocupam 2 bytes em UTF-8, e o substr() trabalha com bytes, não com caracteres. Para texto em inglês, esse método é ideal, mas para projetos multilíngues — não.

\n\n

Método #2: O correto — mb_substr() para strings multibyte

\n\n

Se o seu projeto trabalha com Unicode (e hoje isso é praticamente obrigatório), use mb_substr() da extensão mbstring.

\n\n
<?php\n$string = "Olá, mundo!";\n$lastChar = mb_substr($string, -1);\necho $lastChar; // Exibe: !\n?>
\n\n

Agora a parte mais interessante — trabalhando com emojis:

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

Vantagens:

\n
    \n
  • Processa corretamente qualquer codificação (UTF-8, UTF-16, etc.)
  • \n
  • Funciona com emojis e caracteres especiais
  • \n
\n\n

Desvantagens:

\n
    \n
  • Requer a extensão mbstring instalada (presente em quase todas as hospedagens)
  • \n
  • Ligeiramente mais lento que substr()
  • \n
\n\n

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

\n\n

Você pode dividir a string em um array de caracteres e pegar o último elemento. Parece elegante, mas tem um detalhe.

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

Atenção: str_split() também não funciona bem com strings multibyte. Para acentos, use preg_split() com a 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; // Exibe: o\n?>
\n\n

Vantagens:

\n
    \n
  • Código intuitivo
  • \n
  • Fácil de obter não só o último, mas qualquer caractere
  • \n
\n\n

Desvantagens:

\n
    \n
  • Consumo excessivo de memória (cria um array)
  • \n
  • Mais lento que funções diretas
  • \n
\n\n

Método #4: Avançado — iconv_substr() para codificações específicas

Blogs

Book Recommendations