- как получить последний символ строки в PHP?
- PHP: substr и мощные альтернативы, чтобы вырезать часть строки
- Получаем строку начиная с определенного символа
- Получаем определенное количество символов
- Вырезаем символы с конца
- Получаем несколько последних символов
- Получаем первый символ строки
- Получаем последний символ строки
- Получение подстроки по регулярному выражению
- Проблема при работе с многобайтовыми кодировками.
- Продвинутая работа со строками
- как получить последний символ строки в PHP?
- 10 ответов
как получить последний символ строки в PHP?
Мне нужно получить последний символ строки. Скажем, у меня есть «тестеры» в качестве входной строки, и я хочу, чтобы результат был «s». как я могу это сделать в PHP?
substr("testers", -1); // returns "s"
Или прямым доступом к строке :
Обратите внимание, что это не работает для многобайтовых строк. Если вам нужно работать с многобайтовой строкой, рассмотрите использование семейства функций mb_* .
В предыдущем и следующем PHP 7.1 вы сможете это сделать ( Accepted rfc для отрицательных смещений строк ):
; echo $silly[-3]; echo $silly[-15]; echo $silly[-13]; echo $silly[-1]; echo $silly[-4]; echo $silly; echo $silly[-4]; echo $silly[-8]; echo $silly; die();
Я дам вам угадать результат.
Кроме того, я добавил это к коду производительности xenonite с этими результатами:
substr () занял 7.0334868431091сек.
доступ к массиву занял 2,3111131191254 секунд
Прямой доступ к строке занял 1.7971360683441сек.
Я не могу оставлять комментарии, но в отношении ответа FastTrack также помните, что окончание строки может быть только одиночным символом. Я бы предложил
EDIT: Мой код ниже был отредактирован кем-то, поэтому он не делает то, что я указал. Я восстановил исходный код и изменил формулировку, чтобы сделать ее более понятной.
trim (или rtrim ) удалит все пробелы, поэтому, если вам нужно проверить пробел, вкладку или другие пробелы, сначала замените различные окончания строк:
$order = array("\r\n", "\n", "\r"); $string = str_replace($order, '', $string); $lastchar = substr($string, -1);
Я бы посоветовал пойти на решение Гордона, поскольку он более эффективен, чем substr ():
---------------------------------- 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
Здесь я могу показать вам оба примера:
Строка на разных языках, включая C sharp и PHP, также считается массивом символов.
Зная, что в теории операции массива должны быть быстрее строковых, которые вы могли бы сделать,
$foo = "bar"; $lastChar = strlen($foo) -1; echo $foo[$lastChar]; $firstChar = 0; echo $foo[$firstChar];
Однако стандартные функции массива, такие как
не будет работать с строкой.
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.'
'; > >
PHP: substr и мощные альтернативы, чтобы вырезать часть строки
Поговорим о том, как обрезать строку в PHP. Функция substr в предназначена для получения части строки. Она выделяет подстроку из переданной строки и возвращает её. Для этого нужно указать строку, порядковый номер символа, начиная с которого нужно вырезать строку, порядковый номер символа, до которого мы верезаем подстроку.
Обратите внимание, что substr неправильно работает с многобайтовыми кодировками, поэтому мы будем использовать mb_substr, которая работает с ними корректно. Об этой проблеме немного ниже.
mb_substr( string $string, int $start, int|null $length = null, string|null $encoding = null ): string
- $string — строка, из которой мы будем вырезать подстроку
- $start — символ, с которого мы будем вырезать подстроку
- $length — сколько символов мы будем вырезать (по умолчанию будем вырезать все оставшиеся)
- $encoding — кодировка
Теперь перейдем к примерам.
Получаем строку начиная с определенного символа
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8); echo $result; // результат: phpstack.ru/admin/
Мы вырезали первые 8 символов из строки, содержащей URL адрес.
Получаем определенное количество символов
Теперь давайте вырежем еще и «/admin/» в конце.
Мы бы могли сделать это указав количество символов, которое нужно взять, оно равно количеству символов в домене, их 11
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8, 11); // возьмем 11 символов начиная с 8-го echo $result; // результат: phpstack.ru
Вырезаем символы с конца
Что если мы не знаем количества символов в домене, но знаем что нужно вырезать строку «/admin/», длина которой составляет 7 символов? Иными словами нам нужно вырезать с конца.
В таком случае нужно указать отрицательное число:
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8, -7); // удаляем 8 символов с начала и 7 символов с конца echo $result; // результат: phpstack.ru
Получаем несколько последних символов
Что если нам нужно вернуть наоборот только 7 последних символов? Тогда код будет следующим:
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, -7); // Получаем 7 символов с конца, остальное удаляем echo $result; // результат: /admin/
Получаем первый символ строки
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 0, 1); // Начиная с 0 берем 1 символ echo $result; // результат: h
Получаем последний символ строки
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, -1); // начинаем на 1 символ относительно конца echo $result; // результат: /
Получение подстроки по регулярному выражению
Если вам не хватает возможностей substr, возможно вам необходим более мощный инструмент: preg_match — эта функция позволяет получить подстроки по регулярному выражению.
Проблема при работе с многобайтовыми кодировками.
$url = 'привет'; $result1 = mb_substr($url, 3); // удаляем 3 символа с начала $result2 = substr($url, 3); // удаляем 3 символа с начала var_dump($result1); // вет var_dump($result2); // �ивет
Что случилось? Почему в первом случае, где мы использовали mb_substr все сработало хорошо, а во втором случае вернулся какой-то битый символ?
Дело в том, что в UTF-8 кириллица кодируется 2 байтам, вместо одного. substr считает, что символ равен байту и поэтому вырезает 3 байта с начала. Таким образом она вырезала букву «П», и только половину буквы «Р». В общем вы поняли: всегда используйте mb_substr когда работаете с текстом, который потенциально может содержать многобайтовые символы.
Продвинутая работа со строками
Если вы часто работаете со строками, вам пригодится это расширение: symfony/string
С его помощью вы сможете легко вырезать строки. Взгляните на несколько примеров:
// returns a substring which starts at the first argument and has the length of the // second optional argument (negative values have the same meaning as in PHP functions) u('Symfony is great')->slice(0, 7); // 'Symfony' u('Symfony is great')->slice(0, -6); // 'Symfony is' u('Symfony is great')->slice(11); // 'great' u('Symfony is great')->slice(-5); // 'great' // reduces the string to the length given as argument (if it's longer) u('Lorem Ipsum')->truncate(3); // 'Lor' u('Lorem Ipsum')->truncate(80); // 'Lorem Ipsum' // the second argument is the character(s) added when a string is cut // (the total length includes the length of this character(s)) u('Lorem Ipsum')->truncate(8, '…'); // 'Lorem I…' // if the third argument is false, the last word before the cut is kept // even if that generates a string longer than the desired length u('Lorem Ipsum')->truncate(8, '…', false); // 'Lorem Ipsum'
как получить последний символ строки в PHP?
Мне нужно получить последний символ строки. Скажем, у меня есть «тестеры» в качестве входной строки, и я хочу, чтобы результат был «s». как я могу это сделать в PHP?
10 ответов
substr("testers", -1); // returns "s"
Если вы используете многобайтовые кодировки символов, такие как UTF-8, используйте вместо этого mb_substr ( php.net/mb_substr ).
так много для моего substr ($ string, strlen ($ string) -1, 1) ;. Кажется, я проделал длинный путь вокруг!
Вам нужны только многобайтовые строковые функции, если строка оценивается как двоичная строка. Ака, когда php не знает кодировку. В противном случае типичные не многобайтовые строковые функции будут работать просто отлично.
Обратите внимание, что это не работает для многобайтовых строк. Если вам нужно работать с многобайтовой строкой, рассмотрите использование mb_* семейства строк.
Я думаю, что это лучшее решение, потому что оно позволяет вам модифицировать символ, в то время как решение substr, приведенное выше, этого не делает.
В верхнем и следующем PHP 7.1 вы сможете это сделать (Accepted rfc для отрицательных смещений строки):
; echo $silly[-3]; echo $silly[-15]; echo $silly[-13]; echo $silly[-1]; echo $silly[-4]; echo $silly; echo $silly[-4]; echo $silly[-8]; echo $silly; die();
Я дам вам угадать результат.
Кроме того, я добавил это в код производительности xenonite с этими результатами:
substr() занял 7.0334868431091сек.
Доступ к массиву
занял 2.3111131191254seconds
Прямой доступ к строке занял 1.7971360683441сек.
Спасибо за публикацию тестов! Если кто-то заинтересован в тестах C # для того же, эта страница — хорошее чтение. Прямой доступ к последнему выигранному персонажу.
@TaufikNurRahmanda Технически нет никакой разницы между [] и <>. Разработчики PHP дали возможность использовать либо. Для более подробной информации смотрите: php.net/manual/en/migration71.new-features.php
Я не могу оставлять комментарии, но в отношении ответа FastTrack также помните, что окончание строки может быть только одиночным символом. Я бы предложил
РЕДАКТИРОВАТЬ: Мой код ниже был отредактирован кем-то, что сделало его не тем, что я указал. Я восстановил исходный код и изменил формулировку, чтобы сделать ее более понятной.
trim (или rtrim ) удалит все пробелы, поэтому, если вам нужно проверить пробел, вкладку или другие пробелы, сначала замените несколько окончаний строк:
$order = array("\r\n", "\n", "\r"); $string = str_replace($order, '', $string); $lastchar = substr($string, -1);