Мені потрібно отримати останній символ рядка. Скажіть, у мене є "тестери" як вхідний рядок, і я хочу, щоб результат був "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_*
сімейства рядків функцій.
Станом на 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)
EDIT: Мій код нижче хтось відредагував, і він не робив те, що я вказав. Я відновив свій початковий код і змінив формулювання, щоб зробити його більш зрозумілим.
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 (Feed Return Feed Line).
Я не думаю, що людині, яка поставила запитання, це було потрібно, але для мене у мене виникли проблеми з отриманням останнього символу з рядка з текстового файлу, тому я впевнений, що у інших виникнуть подібні проблеми.
Останнього символу можна знайти за допомогою php багатьма способами, як substr () та mb_substr () .
Якщо ви використовуєте багатобайтові кодування символів, такі як UTF-8, використовуйте mb_substr замість substr
Тут я можу показати вам обидва приклади:
<?php
echo substr("testers", -1);
echo mb_substr("testers", -1);
?>
Рядок різними мовами, включаючи C shar та 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()
корисні, як це знайдено в цій самостійній бібліотеці .