Avatar ·

Как получить последний символ строки в PHP?

Всем привет! Я только начал изучать PHP и столкнулся с такой задачей: мне нужно получить последний символ из строки. Например, есть переменная: ```php $string = "Hello, world!"; ``` Я хочу получить "!" — последний символ. Пробовал использовать `$string[-1]`, но это вызывает ошибку "Uninitialized string offset". Потом прочитал, что в старых версиях PHP так нельзя, а в новых можно, но как-то непонятно. Подскажите, как правильно и надёжно это сделать? Желательно, чтобы код работал на всех версиях PHP, включая устаревшие. Ещё вопрос: а что делать, если строка пустая? У меня бывает, что строка приходит из формы и может быть пустой, тогда попытка получить последний символ вызывает ошибку. Нужно как-то проверять длину строки заранее? Заранее спасибо за помощь! Буду благодарен за примеры кода и объяснение, как это работает. <<>>

Основной способ: substr() — универсальное решение

Самый надёжный и обратно совместимый способ — использовать функцию substr() с отрицательным значением длины. Отрицательное число означает «отсчёт от конца строки».

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

Если строка пустая, substr() вернёт false (до PHP 8.0) или пустую строку (начиная с PHP 8.0). Чтобы избежать ошибок, всегда проверяйте длину строки:

<?php
$string = ""; // пустая строка
if (strlen($string) > 0) {
    $lastChar = substr($string, -1);
    echo $lastChar;
} else {
    echo "Строка пуста";
}
?>

Современный способ: синтаксис массивов (PHP 7.1+)

Начиная с PHP 7.1, к строке можно обращаться как к массиву, используя отрицательные индексы:

<?php
$string = "Hello, world!";
$lastChar = $string[-1]; // !
echo $lastChar;
?>

Этот способ короче, но работает только на PHP 7.1 и новее. Для пустой строки он вернёт пустую строку без ошибки (начиная с PHP 7.1). Однако если вы используете старый хостинг с PHP 5.x, такой код вызовет ошибку.

Альтернативный способ: mb_substr() для многобайтовых строк

Если ваша строка содержит кириллицу, иероглифы или эмодзи, обычный substr() может отрезать неправильно (он работает с байтами, а не с символами). В таком случае используйте мультибайтовую версию:

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

Для корректной работы mb_substr() требуется расширение mbstring, которое обычно включено в современных сборках PHP.

Сравнение методов

  • substr($str, -1) — работает на всех версиях PHP, но не поддерживает многобайтовые кодировки.
  • $str[-1] — короткий синтаксис, требует PHP 7.1+, не поддерживает многобайтовые строки.
  • mb_substr($str, -1) — универсальный для любых кодировок (UTF-8), требует расширения mbstring.

Рекомендация

Для большинства проектов используйте substr($string, -1) с проверкой длины строки. Если работаете с UTF-8 (кириллица, эмодзи) — переходите на mb_substr(). Не забывайте обрабатывать пустые строки, чтобы избежать ошибок в логах.

<<>>

Использование str_split() и end()

Ещё один способ — разбить строку на массив символов и взять последний элемент:

<?php
$string = "Hello, world!";
$chars = str_split($string);
$lastChar = end($chars); // !
echo $lastChar;
?>

Этот метод работает на всех версиях PHP и не требует проверки длины строки — если строка пуста, end() вернёт false. Однако он менее производительный, так как создаёт массив из всех символов. Для коротких строк это не критично, но для больших текстов лучше использовать substr().

Использование регулярного выражения

Можно извлечь последний символ с помощью регулярного выражения:

<?php
$string = "Hello, world!";
preg_match('/.$/', $string, $matches);
$lastChar = $matches[0] ?? ''; // !
echo $lastChar;
?>

Регулярное выражение /.$/ означает «любой символ в конце строки». Этот способ избыточен для простой задачи, но может быть полезен, если нужно одновременно выполнить более сложную обработку (например, проверить, является ли последний символ буквой).