В PHP есть функция «str_replace()», которая находит определенную строку и заменяет её на другую, причём, если эта строка поиска встречается много раз, то будут заменены все найденные вхождения.
Порой нам нужно заменять только 1-е найденное вхождение.
Такой функции нет, но для нас не составит труда её написать.
Идея такая: сначала мы ищем первое вхождение нашей строчку, и если находим его — то вырезаем и заменяем необходимой строкой.
function str_replace_once($search, $replace, $text)
{
$pos = strpos($text, $search);
return $pos!==false ? substr_replace($text, $replace, $pos, strlen($search)) : $text;
}
Интерфейс функции «str_replace_once()» такой же как и у «str_replace()».
Пример использования:
$str = 'Helo World!';
$str = str_replace_once('l', 'll', $str);
// $str = 'Hello World!';
Круто! 40 минут сижу, ищу функцию замены только первого совпадение в строке, а она тут, молодец автор!
Спасибо! гениальная функция
Спасибо. Как раз сегодня понадобилось
Автору респект, я же убил на это полтора часа.
Благодарю, отличное решение.
Спасибо огромнейшее !!!
Как добиться того что бы понять эту функцию ? Как написать свою если не понимаешь чужую ? Где этому учат ?
заканался уже самоучкой — многое не проясняется :(
Чтобы работало c UTF-8 можно сделать так:
function str_replace_once($search, $replace, $text) {
$pos = mb_strpos($text, $search);
return $pos!==false ? mb_substr($text, 0, $pos).$replace.mb_substr($text, $pos+mb_strlen($search)) : $text;
}
Чувак, спасибо огромное. Я конечно не мучился полчаса, а сразу попал сюда, но всего спасибо тебе.
Предложенная функция отрабатывает очень долго.
Гораздо быстрее сработает что—то вроде:
static public function str_replace_once($search, $replace, $text){
return implode($replace, explode($search, $text, 2));
}
Спасибо! Работает. Хотел сам написать, но решил сперва поискать… В гугле вторая строчка по запросу ;)
Все еще проще!!!
$str = ‘Helo World!’;
$str = preg_replace(‘/l/’, ‘ll’, $str, 1); //последней цифрой указывается сколько сделать замен вхождений, если не указать, заменяются все вхождения
// $str = ‘Hello World!’;
И никаких дополнительных функций!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Не надо ничего писать. Просто вызываете функцию str_replace, у нее есть опциональный параметр, указывающий, сколько замен сделать. Ставите туда единичку.
Александр из предыдущего комментария, не вводите людей в заблуждение. Этот опциональный параметр заполняется количеством замен. Но замены происходят все!
Это Шедеврально
Конгениально!!!!
Огромное спасибо, два дня билась над str_replace, чтобы выделить одно слово из одинаковых