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?
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?
Respostas:
substr("testers", -1); // returns "s"
Ou, para cadeias multibytes:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ).
Ou pelo acesso direto à string :
$string[strlen($string)-1];
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];
No PHP 7.1, você pode fazer isso ( rfc aceito para deslocamentos negativos de string ):
<?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();
Vou deixar você adivinhar a saída.
Além disso, adicionei isso ao código de desempenho do xenonite com estes resultados:
substr () levou 7.0334868431091seconds
o acesso à matriz levou 2,3111131191254segundos
O acesso direto a cadeias (deslocamentos negativos de cadeias) levou 1.7971360683441 segundos
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:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
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:
$str[-1]
A pedido de um @mickmackusa, complemento minha resposta com possíveis formas de aplicação:
<?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)
Eu aconselho a procurar a solução de Gordon, pois é mais 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();
produz algo como
----------------------------------
10000000 repetitions...
----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
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.
Você pode encontrar o último caractere usando php de várias maneiras, como substr () e mb_substr () .
Se você estiver usando codificações de caracteres multibyte como UTF-8, use mb_substr em vez de substr
Aqui eu posso mostrar os dois exemplos:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
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
$foo = "bar";
$lastChar = strlen($foo) -1;
echo $foo[$lastChar];
$firstChar = 0;
echo $foo[$firstChar];
Entretanto, funções de matriz padrão como
count();
não funcionará em uma string.
Siemano, obtenha apenas arquivos php do diretório selecionado:
$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, conforme encontrado nesta biblioteca independente .