Как получить последний символ строки в PHP: 5 проверенных способов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Как получить последний символ строки в PHP: полное руководство для начинающих и профи

Представьте ситуацию: вы пишете скрипт, который должен проверить, заканчивается ли email на @gmail.com, или вам нужно извлечь последнюю букву из имени пользователя. Казалось бы, элементарная задача — взять последний символ строки в PHP. Но не тут-то было! Даже в таком простом вопросе кроется множество подводных камней, особенно когда речь заходит о русском языке, эмодзи или спецсимволах.

По данным Stack Overflow, вопрос "How to get the last char of a string in PHP?" набирает тысячи просмотров каждый месяц. И это неспроста: новички часто спотыкаются на substr() с отрицательными индексами, а опытные разработчики спорят о производительности и корректной работе с UTF-8.

В этой статье мы разберём 5 рабочих способов, покажем реальные примеры кода и дадим чёткие рекомендации. Поехали!

Метод №1: Классика — substr() с отрицательным индексом

Самый популярный и лаконичный способ. Функция substr() принимает отрицательное значение длины, чтобы отсчитать символы с конца строки.

<?php
$string = "Hello, World!";
$lastChar = substr($string, -1);
echo $lastChar; // Выведет: !
?>

Плюсы:

  • Коротко и понятно
  • Работает быстро

Минусы:

  • Не поддерживает многобайтовые кодировки (кириллицу, иероглифы)
  • Может вернуть "битый" символ для UTF-8 строк

Пример проблемы с кириллицей:

<?php
$string = "Привет";
$lastChar = substr($string, -1);
echo $lastChar; // Выведет: � (знак вопроса в ромбе)
?>

Почему так? Потому что русские буквы занимают 2 байта в UTF-8, а substr() работает с байтами, а не с символами. Для английского текста этот метод идеален, но для многоязычных проектов — нет.

Метод №2: Правильный — mb_substr() для многобайтовых строк

Если ваш проект работает с Unicode (а сегодня это практически обязательно), используйте mb_substr() из расширения mbstring.

<?php
$string = "Привет, мир!";
$lastChar = mb_substr($string, -1);
echo $lastChar; // Выведет: !
?>

А теперь самое интересное — работа с эмодзи:

<?php
$string = "👋 Привет 🌍";
$lastChar = mb_substr($string, -1);
echo $lastChar; // Выведет: 🌍
?>

Плюсы:

  • Корректно обрабатывает любые кодировки (UTF-8, UTF-16 и др.)
  • Работает с эмодзи и спецсимволами

Минусы:

  • Требует установленного расширения mbstring (есть почти на всех хостингах)
  • Чуть медленнее substr()

Метод №3: Альтернатива — str_split() и end()

Можно разбить строку на массив символов и взять последний элемент. Выглядит элегантно, но есть нюанс.

<?php
$string = "PHP";
$chars = str_split($string);
$lastChar = end($chars);
echo $lastChar; // Выведет: P
?>

Внимание: str_split() также не дружит с многобайтовыми строками. Для кириллицы нужно использовать preg_split() с юникодным флагом:

<?php
$string = "Код";
$chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
$lastChar = end($chars);
echo $lastChar; // Выведет: д
?>

Плюсы:

  • Интуитивно понятный код
  • Можно легко получить не только последний, но и любой символ

Минусы:

  • Избыточное потребление памяти (создаётся массив)
  • Медленнее прямых функций

Метод №4: Продвинутый — iconv_substr() для специфических кодировок

Если вам нужно работать с кодировками, отличными от UTF-8 (например, Windows-1251 или KOI8-R), на помощь придёт iconv_substr().

<?php
$string = "Привет";
$lastChar = iconv_substr($string, -1, 1, 'UTF-8');
echo $lastChar; // Выведет: т
?>

Этот метод особенно полезен при интеграции со старыми базами данных или API, которые используют нестандартные кодировки.

Важно: Функция требует установленного расширения iconv.

Метод №5: Хакерский — доступ по индексу с strlen()

Самый "олимпиадный" способ — вычислить длину строки и взять последний символ по индексу.

<?php
$string = "Hello";
$lastChar = $string[strlen($string) - 1];
echo $lastChar; // Выведет: o
?>

Выглядит круто, но:

  • strlen() возвращает длину в байтах, а не в символах
  • Для кириллицы результат будет неверным

Исправленная версия для Unicode:

<?php
$string = "Мир";
$lastChar = mb_substr($string, mb_strlen($string) - 1, 1);
echo $lastChar; // Выведет: р
?>

Но зачем так усложнять, если есть mb_substr($string, -1)?

Сравнительная таблица методов

Чтобы вы могли быстро выбрать подходящий способ, мы подготовили наглядное сравнение:

Метод Поддержка UTF-8 Скорость Сложность
substr($s, -1) Нет 🚀 Очень быстро 😊 Просто
mb_substr($s, -1)

Блоги

Рекомендаций по книгам