как получить последний символ строки в PHP?

Мне нужно получить последний символ строки. Скажем, у меня есть «тестеры» в качестве входной строки, и я хочу, чтобы результат был «s». как я могу это сделать в PHP?

 substr("testers", -1); // returns "s" 
 substr($string, -1) 

Или прямым доступом к строке :

 $string[strlen($string)-1]; 

Обратите внимание, что это не работает для многобайтовых строк. Если вам нужно работать с многобайтовой строкой, рассмотрите использование семейства функций mb_* .

В предыдущем и следующем PHP 7.1 вы сможете это сделать ( Accepted rfc для отрицательных смещений строк ):

 <?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}; die(); 

Я дам вам угадать результат.

Кроме того, я добавил это к коду производительности xenonite с этими результатами:

substr () занял 7.0334868431091сек.

доступ к массиву занял 2,3111131191254 секунд

Прямой доступ к строке занял 1.7971360683441сек.

Я не могу оставлять комментарии, но в отношении ответа FastTrack также помните, что окончание строки может быть только одиночным символом. Я бы предложил

 substr(trim($string), -1) 

EDIT: Мой код ниже был отредактирован кем-то, поэтому он не делает то, что я указал. Я восстановил исходный код и изменил формулировку, чтобы сделать ее более понятной.

trim (или rtrim ) удалит все пробелы, поэтому, если вам нужно проверить пробел, вкладку или другие пробелы, сначала замените различные окончания строк:

 $order = array("\r\n", "\n", "\r"); $string = str_replace($order, '', $string); $lastchar = substr($string, -1); 

Я бы посоветовал пойти на решение Гордона, поскольку он более эффективен, чем 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(); 

выводит что-то вроде

  ---------------------------------- 10000000 repetitions... ---------------------------------- substr() took 2.0285921096802seconds array access took 1.7474739551544seconds 

Помните, что если у вас есть строка, которая была прочитана как строка из текстового файла с использованием функции fgets() , вам нужно использовать substr($string, -3, 1) чтобы вы получили фактический символ, а не часть CRLF (возврат линии подачи).

Я не думаю, что человек, который задал вопрос, нуждался в этом, но для меня у меня возникли проблемы с получением последнего символа из строки из текстового файла, поэтому я уверен, что другие столкнутся с подобными проблемами.

Вы можете найти последний символ, используя php, много способов, таких как substr () и mb_substr () .

Если вы используете многобайтовые кодировки символов, такие как UTF-8, используйте mb_substr вместо substr

Здесь я могу показать вам оба примера:

 <?php echo substr("testers", -1); echo mb_substr("testers", -1); ?> 

LIVE DEMO

Строка на разных языках, включая C sharp и PHP, также считается массивом символов.

Зная, что в теории операции массива должны быть быстрее строковых, которые вы могли бы сделать,

 $foo = "bar"; $lastChar = strlen($foo) -1; echo $foo[$lastChar]; $firstChar = 0; echo $foo[$firstChar]; 

Однако стандартные функции массива, такие как

 count(); 

не будет работать с строкой.

Siemano, получите только файлы php из выбранного каталога:

 $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 />'; } }