Мне нужно получить последний символ строки. Скажем, у меня есть «тестеры» в качестве входной строки, и я хочу, чтобы результат был «s». как я могу сделать это в PHP?
Мне нужно получить последний символ строки. Скажем, у меня есть «тестеры» в качестве входной строки, и я хочу, чтобы результат был «s». как я могу сделать это в PHP?
Ответы:
substr("testers", -1); // returns "s"
Или для многобайтовых строк:
substr("multibyte string…", -1); // returns "…"
mb_substr
( php.net/mb_substr ).
Или с помощью прямого доступа к строке :
$string[strlen($string)-1];
Обратите внимание, что это не работает для многобайтовых строк. Если вам нужно работать с многобайтовой строкой, рассмотрите возможность использования mb_*
семейства функций string.
Начиная с PHP 7.1.0 также поддерживаются отрицательные числовые индексы, например, просто $string[-1];
Из 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}; // <-- this will be deprecated in PHP 7.4
die();
Я позволю вам угадать вывод.
Кроме того, я добавил это к коду производительности ксенонита со следующими результатами:
substr () занял 7.0334868431091секунд
доступ к массиву занял 2,3111131191254 секунд
Прямой доступ к строке (отрицательные смещения строки) занял 1.7971360683441секунд
Я не могу оставлять комментарии, но в отношении ответа FastTrack, также помните, что конец строки может быть только один символ. Я бы предложил
substr(trim($string), -1)
РЕДАКТИРОВАТЬ: Мой код ниже был отредактирован кем-то, чтобы он не делал то, что я указал. Я восстановил свой исходный код и изменил формулировку, чтобы сделать его более понятным.
trim
(или rtrim
) удалит все пробелы, поэтому, если вам нужно проверить пробел, табуляцию или другие пробелы, сначала вручную замените различные окончания строк:
$order = array("\r\n", "\n", "\r");
$string = str_replace($order, '', $string);
$lastchar = substr($string, -1);
Начиная с PHP 7.1.0, отрицательные смещения строк также поддерживаются. Итак, если вы идете в ногу со временем, вы можете получить доступ к последнему символу в строке, например так:
$str[-1]
По просьбе @mickmackusa я дополняю свой ответ возможными способами применения:
<?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)
Я бы посоветовал перейти к решению Гордона, так как оно более производительно, чем 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);
?>
Строка на разных языках, включая 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 />';
}
}
s($str)->end()
полезным, как найти в этой автономной библиотеке .