Для указания числа замен и выбора направления (с начала или с конца "начинать заменять"), можно использовать такую функцию:
/**
* Выполнит замену с использованием str_replace,
* но есть возможность:
* + ограничить (указать) число замен
* + указать с начала или с конца начинать заменять фрагменты (акутально если число замен ограничено)
*
* @param string $oldpattern - РЕГУЛЯРНОЕ выражение - шаблон подстрок, которые нужно заменить
* @param string $new - на что заменять
* @param string $where - где заменять
* @param boolean|integer $limit - (необяз.) число замен
* @param boolean $reverse - (необяз.) с начала или с конца начинать замены (акутально если число замен ограничено)
* @return string - строка, после замен
*/
function str_replace_limit($oldpattern, $new, $where, $limit = false, $reverse = false) {
$result = '';
if ($reverse) { // переворачиваем строку, если требуется начать с концы
$where = strrev($where);
}
if ($limit) {
$result = preg_replace($oldpattern, $new, $where, $limit);
} else {
$result = preg_replace($oldpattern, $new, $where);
}
if ($reverse) { // переворачиваем строку обратно
$result = strrev($result);
}
return $result;
}
Пример использования:
$str = 'sdfsdf_fsdf_fsdf_fsdf';
echo 'Была строка: ' . $str . "<br>";
$pattern = '/_/'; // будем заменять нижнее подчёркивания (регуляное выражения для него)
$new = '#'; // на решётку
echo ( '<br>str_replace_limit 1 символс начала: <br> '
. str_replace_limit($pattern, $new, $str, 1) . '<br><br>');
echo ( 'str_replace_limit 2 символа с конца: <br> '
. str_replace_limit($pattern, $new, $str, 2, true) . '<br><br>');
echo ( 'str_replace_limit все вхождения (без ограничений): <br> '
. str_replace_limit($pattern, $new, $str) . '<br><br>');
Получим:
Была строка: sdfsdf_fsdf_fsdf_fsdf
str_replace_limit 1 символс начала:
sdfsdf#fsdf_fsdf_fsdf
str_replace_limit 2 символа с конца:
sdfsdf_fsdf#fsdf#fsdf
str_replace_limit все вхождения (без ограничений):
sdfsdf#fsdf#fsdf#fsdf