Мне нужно получить последний символ строки. Скажем, у меня есть «тестеры» в качестве входной строки, и я хочу, чтобы результат был «s». как я могу сделать это в PHP?
Если вы используете многобайтовые кодировки символов, такие как UTF-8, используйте вместо этого mb_substr( php.net/mb_substr ).
Гамбо
9
так много для моего substr ($ string, strlen ($ string) -1, 1) ;. Кажется, я проделал длинный путь вокруг!
Джеффки
4
Вам нужны только многобайтовые строковые функции, если строка оценивается как двоичная строка. Ака, когда php не знает кодировку. В противном случае типичные не многобайтовые строковые функции будут работать просто отлично.
Обратите внимание, что это не работает для многобайтовых строк. Если вам нужно работать с многобайтовой строкой, рассмотрите возможность использования mb_*семейства функций string.
Начиная с PHP 7.1.0 также поддерживаются отрицательные числовые индексы, например, просто $string[-1];
Спасибо за публикацию тестов! Если кто-то заинтересован в тестах C # для того же, эта страница - хорошее чтение. Прямой доступ к последнему выигранному персонажу.
Не могли бы вы объяснить больше о разнице между [] и {} в этом контексте?
Тауфик Нур Рахманда
2
@TaufikNurRahmanda Технически нет разницы между [] и {}. Разработчики PHP дали возможность использовать либо. Для получения более подробной информации смотрите: php.net/manual/en/migration71.new-features.php
RyanNerd
что такое доступ к массиву и что такое прямой доступ к строкам? @RyanNerd afaik это две одинаковые вещи, нет?
Я не могу оставлять комментарии, но в отношении ответа FastTrack, также помните, что конец строки может быть только один символ. Я бы предложил
substr(trim($string),-1)
РЕДАКТИРОВАТЬ: Мой код ниже был отредактирован кем-то, чтобы он не делал то, что я указал. Я восстановил свой исходный код и изменил формулировку, чтобы сделать его более понятным.
trim(или rtrim) удалит все пробелы, поэтому, если вам нужно проверить пробел, табуляцию или другие пробелы, сначала вручную замените различные окончания строк:
Начиная с PHP 7.1.0, отрицательные смещения строк также поддерживаются. Итак, если вы идете в ногу со временем, вы можете получить доступ к последнему символу в строке, например так:
Использование отрицательных смещений было техникой, упомянутой много лет назад RyanNerd. Пожалуйста, оставляйте ответ только тогда, когда у вас есть уникальные и ценные идеи, которыми вы можете поделиться.
mickmackusa
@mickmackusa Почему ты написал это только мне и проигнорировал множественные варианты substr ()?
нектобит
Ничего личного, я просто увидел твой очень короткий и излишний ответ и решил дать свисток. Не стесняйтесь сообщать другие ответы, если вы чувствуете, что они не добавляют никакой ценности. Имейте в виду, что два ответа могут предложить одну и ту же технику, но оба могут быть индивидуально ценными из-за объяснения. Это место обучения и расширения возможностей - добавление уникальных идей к ранее предложенным решениям может быть весьма полезным для исследователей.
mickmackusa
Например, мой ответ был опубликован через месяц после того же метода. Я собирался написать комментарий под предыдущим ответом, но, поскольку я напечатал всю информацию, которую я хотел предложить, это было явно слишком много, чтобы разумно комментировать. Я опубликовал новый ответ и добавил множество дополнительных идей и справочной информации о технике, а также включил тест. Вот как неуникальное решение может быть полезным для исследователей.
Mickmackusa
5
Я бы посоветовал перейти к решению Гордона, так как оно более производительно, чем substr ():
----------------------------------10000000 repetitions...----------------------------------
substr() took 2.0285921096802seconds
array access took 1.7474739551544seconds
Можете это подтвердить. Чем длиннее ваша строка, тем больше разница в производительности. В моем тесте с 10 символами substr медленнее примерно на 20%
Филипп
Не удивительно, так как substr () имеет накладные расходы при вызове функции, а другая - это прямое манипулирование строкой типа «C». Кстати, я запустил этот код на PHP 7.1-dev с результатами: substr () занял 7.090255022049секунд \ доступ к массиву занял 2.3145787715912секунд
RyanNerd
4
Помните, что если у вас есть строка, которая была прочитана как строка из текстового файла с использованием fgets()функции, вам нужно использовать ее substr($string, -3, 1)так, чтобы вы получали реальный символ, а не часть CRLF (перевод строки возврата каретки).
Я не думаю, что человек, который задал вопрос, нуждался в этом, но для меня у меня были проблемы с получением последнего символа из строки из текстового файла, поэтому я уверен, что другие столкнутся с подобными проблемами.
s($str)->end()
полезным, как найти в этой автономной библиотеке .Ответы:
Или для многобайтовых строк:
источник
mb_substr
( php.net/mb_substr ).источник
Или с помощью прямого доступа к строке :
Обратите внимание, что это не работает для многобайтовых строк. Если вам нужно работать с многобайтовой строкой, рассмотрите возможность использования
mb_*
семейства функций string.Начиная с PHP 7.1.0 также поддерживаются отрицательные числовые индексы, например, просто
$string[-1];
источник
Из PHP 7.1 вы можете сделать это ( Принято rfc для отрицательных смещений строк ):
Я позволю вам угадать вывод.
Кроме того, я добавил это к коду производительности ксенонита со следующими результатами:
источник
Я не могу оставлять комментарии, но в отношении ответа FastTrack, также помните, что конец строки может быть только один символ. Я бы предложил
РЕДАКТИРОВАТЬ: Мой код ниже был отредактирован кем-то, чтобы он не делал то, что я указал. Я восстановил свой исходный код и изменил формулировку, чтобы сделать его более понятным.
trim
(илиrtrim
) удалит все пробелы, поэтому, если вам нужно проверить пробел, табуляцию или другие пробелы, сначала вручную замените различные окончания строк:источник
Начиная с PHP 7.1.0, отрицательные смещения строк также поддерживаются. Итак, если вы идете в ногу со временем, вы можете получить доступ к последнему символу в строке, например так:
DEMO
По просьбе @mickmackusa я дополняю свой ответ возможными способами применения:
источник
Я бы посоветовал перейти к решению Гордона, так как оно более производительно, чем substr ():
выводит что-то вроде
источник
Помните, что если у вас есть строка, которая была прочитана как строка из текстового файла с использованием
fgets()
функции, вам нужно использовать ееsubstr($string, -3, 1)
так, чтобы вы получали реальный символ, а не часть CRLF (перевод строки возврата каретки).Я не думаю, что человек, который задал вопрос, нуждался в этом, но для меня у меня были проблемы с получением последнего символа из строки из текстового файла, поэтому я уверен, что другие столкнутся с подобными проблемами.
источник
Вы можете найти последний символ, используя php разными способами, например substr () и mb_substr () .
Здесь я могу показать вам оба примера:
LIVE DEMO
источник
Строка на разных языках, включая C sharp и PHP, также считается массивом символов.
Зная, что в теории операции с массивами должны выполняться быстрее строковых,
Тем не менее, стандартные функции массива, такие как
не будет работать на строке.
источник
Siemano, получите только php файлы из выбранной директории:
источник