Как перевернуть строку в PHP
Разворот строки — классическая задача на знание алгоритмов и особенностей языка. В зависимости от уровня квалификации, решение может варьироваться от использования встроенных функций до сложных ручных реализаций.
1. Уровень Junior: Встроенная функция
Самый простой и эффективный способ для обычных ASCII-строк — использование встроенной функции strrev().
function reverseString(string $str): string
{
return strrev($str);
}
echo reverseString("hello"); // "olleh"
2. Уровень Middle: Ручной цикл
Ручная реализация демонстрирует понимание того, что строка в PHP по умолчанию может рассматриваться как массив байтов. Однако эт от метод не безопасен для многобайтовых строк (он испортит кириллицу или эмодзи).
function reverseStringLoop(string $str): string
{
$reversed = '';
$length = strlen($str);
for ($i = $length - 1; $i >= 0; $i--) {
$reversed .= $str[$i];
}
return $reversed;
}
3. Уровень Senior: Поддержка многобайтовых строк (UTF-8)
Современные приложения почти всегда используют UTF-8. Встроенная strrev() и ручной цикл по байт ам просто "разрежут" многобайтовые символы пополам, что приведет к появлению нечитаемых данных. Senior-разработчик должен знать об этой проблеме и предлагать решения с использованием многобайтовых функций, таких как mb_str_split().
С использованием mb_str_split()
Этот метод является эффективным и гибким способом корректной обработки символов UTF-8.
/**
* Переворачивает многобайтовую строку.
*/
function mb_strrev(string $string, string $encoding = null): string
{
$chars = mb_str_split($string, 1, $encoding ?: mb_internal_encoding());
return implode('', array_reverse($chars));
}
echo mb_strrev("Привет"); // "тевирП"
echo mb_strrev("👋🌍"); // "🌍👋"
Рекурсивный подход (Альтернатива)
Хотя это не самое эффективное решение для длинных строк, оно демонстрирует алгоритмическое мышление.
function reverseRecursive(string $str): string
{
if (mb_strlen($str) <= 1) {
return $str;
}
return reverseRecursive(mb_substr($str, 1)) . mb_substr($str, 0, 1);
}