Замена двух последних символов в строке.. PHP Вариации на тему

переменная типа string является массивом символов типа char, поэтому достаточно заменить последние два индекса. Задача решена в лоб, код плохо читается, так как совершается два однотипных действия. Второй вариант более изощренный: стандартной функцией sub

Замена двух последних символов в строке.. PHP

» » Сообщение:

Первое, что приходит в голову - переменная типа string является массивом символов типа char, поэтому достаточно заменить последние два индекса:

Код: Выделить всё Развернуть
<?php
$str = 'testWord';
$str_length = strlen($str);
$str[$str_length-1] = '*';
$str[$str_length-2] = '*';
echo $str;
?>

Задача решена в лоб, код плохо читается, так как совершается два однотипных действия.

Второй вариант более изощренный: стандартной функцией substr() удаляем два последних символа и добавляем две звездочки:

Код: Выделить всё Развернуть
<?php
$str = 'testWord';
$str = substr($str,0, strlen($str)-2).'**';
echo $str;
?>

Вариант рабочий, но не нравится, что приходится делать конкатенацию строк, из-за чего опять страдает читаемость кода.

Третий вариант также использует стандартную функцию substr_replace(), которая заменяет одни подстроки на другие:

Код: Выделить всё Развернуть
<?php
$str = 'testWord';
$str = substr_replace($str,'**',strlen($str)-2);
echo $str;
?>

Хороший вариант, но используется функция strlen(), поэтому открываем руководство по php и смотрим синтаксис функции substr_replace():

string substr_replace(string str, string replacement, int start [, int length])
Эта функция заменяет в исходной строке одни подстроки на другие. Она возвращает строку str, в которой часть от символа с позицией start и длиной length заменяется строкой replacement. Если аргумент длины length не указан, замена проводится до конца.

Если значение аргумента start положительно, то отсчет производится от начала строки str, в противном случае - от конца. В случае неотрицательного значения length, оно указывает длину заменяемого фрагмента. Если же оно отрицательно, то это - число символов от конца строки str до последнего символа заменяемого фрагмента.

И тогда конечный вариант:

Код: Выделить всё Развернуть
<?php
$str = 'testWord';
$str = substr_replace($str,'**',-2);
echo $str;
?>

Можно было также воспользоваться регулярными выражениями, что работает немного медленнее конечного результата:

Код: Выделить всё Развернуть
<?php
$str = 'testString';
$pattern = "|.{2}$|si";
$replace = '**';
$str = preg_replace($pattern,$replace,$str);
echo $str;
?>
string, char, индекс, word, substr, substr_replace, strlen, preg_replace



Похожие темыКомментарии ПросмотрыПоследнее сообщение
0539Обрезка текста и/или замена стандар...
Сообщение от: Admin
0560Замена прямых кавычек на “ёлочки”. ...
Сообщение от: Admin
0911Массовая замена бб-кода в phpBB. Ка...
Сообщение от: Admin
0191Как убрать из текста слова длиной ...
Сообщение от: Admin
01218Доработка мода Enable HTML - убирае...
Сообщение от: Admin