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


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

 381
Author: sepehr, 2010-04-21

11 answers

substr("testers", -1); // returns "s"
 789
Author: Rich Adams, 2010-04-21 09:48:04
substr($string, -1) 
 58
Author: knittl, 2010-04-21 10:11:51

Или с помощью прямого доступа к строке:

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

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

Начиная с PHP 7.1.0 также поддерживаются отрицательные числовые индексы, например, просто $string[-1];

 57
Author: Gordon, 2018-06-28 06:58:15

В новой версии PHP 7.1 вы сможете это сделать (Принятый 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 секунды

 21
Author: RyanNerd, 2017-05-23 11:47:29

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

substr(trim($string), -1)

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

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

$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
 15
Author: Slashback, 2015-09-03 01:32:44

Я бы посоветовал обратиться к решению Гордона, поскольку оно более эффективно, чем 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
 4
Author: Xenonite, 2015-09-14 14:18:14

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

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

 3
Author: FastTrack, 2012-07-16 16:23:31

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

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

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

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

ЖИВАЯ ДЕМОНСТРАЦИЯ

 1
Author: Faisal, 2016-12-08 06:21:36

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

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

$foo = "bar";


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

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

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

count();

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

 1
Author: Petar Atanasov, 2017-01-05 15:12:12

Начиная с PHP 7.1.0, также поддерживаются отрицательные смещения строк. Итак, если вы идете в ногу со временем, вы можете получить доступ к последнему символу в строке следующим образом:

$str[-1]

ДЕМО-ВЕРСИЯ

 1
Author: nektobit, 2018-10-02 03:17:18

Семано, получай только 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 />';
  }
}
 -1
Author: ZMORA PROSTO Z KRZOKA, 2017-07-31 09:09:10