Как стать автором
Обновить

Замена двух последних символов в слове на звездочки

Этю́д (фр. étude «изучение») — инструментальная пьеса, как правило, небольшого объёма, основанная на частом применении какого-либо трудного приёма исполнения и предназначенная для усовершенствования техники исполнителя. (с) wikipedia

Первое, что приходит в голову — переменная типа 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;
?>
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.