Como obter o último caractere de uma string em PHP?
476
Eu preciso pegar o último caractere de uma string. Digamos que tenho "testadores" como sequência de entrada e quero que o resultado seja "s". como posso fazer isso em PHP?
Se você estiver usando codificações de caracteres multibyte como UTF-8, use mb_substr( php.net/mb_substr ).
Gumbo #
9
muito pelo meu substr ($ string, strlen ($ string) -1, 1) ;. Parece que tomei o LONGO caminho!
jeffkee
4
Você só precisa de funções de sequência multibyte se a sequência for avaliada como sequência binária. Aka, quando o php não conhece a codificação. Caso contrário, as funções típicas de seqüência de caracteres não multibyte funcionarão perfeitamente.
Observe que isso não funciona para cadeias multibyte. Se você precisar trabalhar com cadeias multibyte, considere usar a mb_*família de funções string.
No PHP 7.1.0, também são suportados índices numéricos negativos, por exemplo, apenas $string[-1];
Obrigado por publicar referências! Se alguém estiver interessado nos benchmarks de C # para fazer a mesma coisa, esta página é uma boa leitura. Acessando diretamente o último personagem vencido.
você poderia explicar mais sobre a diferença entre [] e {} nesse contexto?
Taufik Nur Rahmanda
2
@TaufikNurRahmanda Tecnicamente, não há diferença entre [] e {}. Os desenvolvedores do PHP deram a opção de usar qualquer um. Para obter mais detalhes, consulte: php.net/manual/en/migration71.new-features.php
RyanNerd
o que é acesso a array e o que é acesso direto a string? @RyanNerd afaik essas são duas mesmas coisas, não?
Não posso deixar comentários, mas em relação à resposta do FastTrack, lembre-se também de que o final da linha pode ter apenas um caractere. eu sugeriria
substr(trim($string),-1)
EDIT: Meu código abaixo foi editado por alguém, fazendo com que ele não faça o que eu indiquei. Eu restaurei meu código original e mudei o texto para torná-lo mais claro.
trim(ou rtrim) removerá todo o espaço em branco; portanto, se você precisar verificar um espaço, guia ou outro espaço em branco, substitua manualmente primeiro as várias terminações de linha:
A partir do PHP 7.1.0, deslocamentos negativos de string também são suportados. Portanto, se você acompanhar os horários, poderá acessar o último caractere na string assim:
Usar compensações negativas foi uma técnica mencionada anos antes por RyanNerd. Poste uma resposta somente quando tiver idéias únicas e valiosas para compartilhar.
mickmackusa 25/03
@mickmackusa Por que você escreveu apenas para mim e ignorou as múltiplas variações substr ()?
nektobit 25/03
Nada pessoal, acabei de ver sua resposta muito curta e redundante e decidi soar meu apito. Sinta-se à vontade para denunciar as outras respostas se achar que elas não agregam valor. Lembre-se de que duas respostas podem sugerir a mesma técnica, mas ambas são individualmente valiosas devido ao que é explicado. Este é um local de educação e capacitação - adicionar insights exclusivos às soluções oferecidas anteriormente pode ser bastante valioso para os pesquisadores.
mickmackusa 25/03
Por exemplo, esta resposta foi postada um mês após a mesma técnica. Ia escrever um comentário com a resposta anterior, mas, ao digitar todas as informações que queria oferecer, obviamente era demais comentar sensatamente. Publiquei uma nova resposta e adicionei muitas informações complementares e informações básicas sobre a técnica e incluí uma referência. É assim que uma solução não exclusiva pode ser valiosa para os pesquisadores.
mickmackusa 26/03
5
Eu aconselho a procurar a solução de Gordon, pois é mais eficiente que substr ():
----------------------------------10000000 repetitions...----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Este deve ser um comentário sobre a resposta de Gordon.
Ganso
1
Pode confirmar isso. Quanto mais longa sua string, maior é a diferença de desempenho. No meu teste com 10 caracteres substr é de cerca de 20% mais lento
Philipp
Não é de surpreender, pois substr () tem a sobrecarga de uma chamada de função e a outra é a manipulação direta de strings "tipo C". BTW eu executei este código no PHP 7.1-dev com os resultados: substr () levou 7.090255022049seconds \ array acesso levou 2.3145787715912seconds
RyanNerd
4
Lembre-se, se você tiver uma string lida como uma linha de um arquivo de texto usando a fgets()função, precisará usarsubstr($string, -3, 1) para obter o caractere real e não fazer parte do CRLF (Carriage Return Line Feed).
Eu não acho que a pessoa que fez a pergunta precisava disso, mas para mim, eu estava tendo problemas para obter o último caractere de uma string de um arquivo de texto, por isso tenho certeza de que outros encontrarão problemas semelhantes.
s($str)->end()
útil, conforme encontrado nesta biblioteca independente .Respostas:
Ou, para cadeias multibytes:
fonte
mb_substr
( php.net/mb_substr ).fonte
Ou pelo acesso direto à string :
Observe que isso não funciona para cadeias multibyte. Se você precisar trabalhar com cadeias multibyte, considere usar a
mb_*
família de funções string.No PHP 7.1.0, também são suportados índices numéricos negativos, por exemplo, apenas
$string[-1];
fonte
No PHP 7.1, você pode fazer isso ( rfc aceito para deslocamentos negativos de string ):
Vou deixar você adivinhar a saída.
Além disso, adicionei isso ao código de desempenho do xenonite com estes resultados:
fonte
Não posso deixar comentários, mas em relação à resposta do FastTrack, lembre-se também de que o final da linha pode ter apenas um caractere. eu sugeriria
EDIT: Meu código abaixo foi editado por alguém, fazendo com que ele não faça o que eu indiquei. Eu restaurei meu código original e mudei o texto para torná-lo mais claro.
trim
(ourtrim
) removerá todo o espaço em branco; portanto, se você precisar verificar um espaço, guia ou outro espaço em branco, substitua manualmente primeiro as várias terminações de linha:fonte
A partir do PHP 7.1.0, deslocamentos negativos de string também são suportados. Portanto, se você acompanhar os horários, poderá acessar o último caractere na string assim:
DEMO
A pedido de um @mickmackusa, complemento minha resposta com possíveis formas de aplicação:
fonte
Eu aconselho a procurar a solução de Gordon, pois é mais eficiente que substr ():
produz algo como
fonte
Lembre-se, se você tiver uma string lida como uma linha de um arquivo de texto usando a
fgets()
função, precisará usarsubstr($string, -3, 1)
para obter o caractere real e não fazer parte do CRLF (Carriage Return Line Feed).Eu não acho que a pessoa que fez a pergunta precisava disso, mas para mim, eu estava tendo problemas para obter o último caractere de uma string de um arquivo de texto, por isso tenho certeza de que outros encontrarão problemas semelhantes.
fonte
Você pode encontrar o último caractere usando php de várias maneiras, como substr () e mb_substr () .
Aqui eu posso mostrar os dois exemplos:
DEMONSTRAÇÃO AO VIVO
fonte
Uma string em diferentes idiomas, incluindo C sharp e PHP, também é considerada uma matriz de caracteres.
Sabendo que, em teoria, as operações de array devem ser mais rápidas do que aquelas que você poderia fazer
Entretanto, funções de matriz padrão como
não funcionará em uma string.
fonte
Siemano, obtenha apenas arquivos php do diretório selecionado:
fonte