Как инвертировать строку (PHP)

Чтобы в строке изменить порядок символов на обратный (инвертировать), в PHP есть функция string strrev(string str).

strrev()

Функция strrev(), принимает один параметр — строку, и возвращает ее в обратном порядке.

Пример

Инвертировать строку "expange".

<?php echo strrev('expange');//egnapxe ?>

strrev() и юникод

Если инвертируемая строка в юникоде и содержит кириллицу, то в результате вы увидите посторонние символы.

Решить проблему можно двумя способами.

Первый — перекодируем нашу строку в windows-1251 (или какую другую кодировку), инвертируем ее функцией strrev(), затем кодируем обратно в юникод.

Второй — преобразуем строку в массив, где каждый символ станет элементом массива, затем инвертируем массив функцией array_reverse(), и склеиваем полученный массив.

Напишем каждому способу свою функцию.

strrev_enc() — способ 1

За основу возьмем кодировку windows-1251 (статья все-таки на русском языке). Функция принимает так же один параметр — строку.

<?php function strrev_enc($str) { $str = iconv('utf-8', 'windows-1251', $str); $str = strrev($str); $str = iconv('windows-1251', 'utf-8', $str); return $str; } $str = 'Поделись опытом на expange'; echo strrev_enc($str); // egnapxe ан мотыпо ьсиледоП ?>

strrev_arr() — способ 2

Во втором способе кодировка не нужна.

<?php function strrev_arr($str) { preg_match_all('/./us', $str, $array); $str = join('',array_reverse($array[0])); return $str; } $str = 'Поделись опытом на expange'; echo strrev_enc($str); // egnapxe ан мотыпо ьсиледоП ?>

Производительность

Сравнивая по скорости strrev_enc() и strrev_arr(), функция strrev_enc() работает быстрее примерно в 4 раза.

Каждой функцией 1000 раз инвертировалась строка «Поделись опытом на expange».

strrev_arr() справилась за 0.0059 секунд;

strrev_arr() справилась за 0.0251 секунд.

Категории

ПрограммированиеPHPСтрокиСтроки в PHP

Комментарии

termit

Ошибка в 11 строчке, правильно будет: echo strrev_arr($str); // egnapxe ан мотыпо ьсиледоП

Ответить
termit

Второй способ не работает пишет: Fatal error: Call to undefined function strrev_enc() in index.php on line 11

Ответить