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

323

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

Теги:
string

10 ответов

706
Лучший ответ
substr("testers", -1); // returns "s"
  • 101
    Если вы используете многобайтовые кодировки символов, такие как UTF-8, используйте вместо этого mb_substr ( php.net/mb_substr ).
  • 7
    так много для моего substr ($ string, strlen ($ string) -1, 1) ;. Кажется, я проделал длинный путь вокруг!
Показать ещё 1 комментарий
53
substr($string, -1) 
52

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

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

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

  • 2
    Мне нравится этот ответ в стиле C, и я удивляюсь, почему у него так мало голосов.
  • 16
    @ValentinMercier: потому что это вопрос PHP, а не C.
Показать ещё 1 комментарий
15

В верхнем и следующем 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.3111131191254seconds

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

  • 0
    Намеренно опечатка ...
  • 0
    Потрясающая особенность!
Показать ещё 3 комментария
14

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

substr(trim($string), -1)

РЕДАКТИРОВАТЬ: Мой код ниже был отредактирован кем-то, что сделало его не тем, что я указал. Я восстановил исходный код и изменил формулировку, чтобы сделать ее более понятной.

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

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

Я бы посоветовал пойти на решение Gordon, поскольку он более эффективен, чем 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
  • 2
    Это должен быть комментарий к ответу Гордона.
  • 1
    Можете это подтвердить. Чем длиннее ваша строка, тем больше разница в производительности. В моем тесте с 10 символами substr медленнее примерно на 20%
Показать ещё 1 комментарий
3

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

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

1

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

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

$foo = "bar";


$lastChar = strlen($foo) -1;
echo $foo[$lastChar];

$firstChar = 0;
echo $foo[$firstChar];

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

count();

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

1

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

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

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

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

LIVE DEMO

0

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 />';
  }
}
  • 0
    Вы читали вопрос?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню