Это должен быть принятый ответ. Встроенные функции имеют приоритет над пользовательскими функциями в любой день.
Бенджам
13
Да, 4-й аргумент, равный «0», вызывает вставку замещающей строки без перезаписи любой исходной строки.
Баттл Буткус
7
Блестящий ответ. Но для ленивых людей (таких как я) в вашем посте должно быть краткое объяснение. Я сделаю это сейчас и скопирую n'paste из php.net: «Конечно, если длина равна нулю, эта функция будет иметь эффект вставки замены в строку с заданным начальным смещением».
Wolfsblvt
7
Осторожно: функция substr_replace () не является многобайтовой! Ваш $ pos может оказаться в середине символа UTF-8. Возможно, вам придется использовать решение @ tim-cooper, но с помощью mb_substr ().
Используйте функцию stringInsert, а не функцию putinplace. Я использовал более позднюю функцию для анализа запроса MySQL. Хотя вывод выглядел хорошо, запрос привел к ошибке, которая заняла у меня некоторое время, чтобы отследить. Ниже приведена моя версия функции stringInsert, для которой требуется только один параметр.
@minitech оп сказал using strpos to get the position of a substring, так что на substringпервом месте. И он не сказал найти только одну позицию.
xdazz
3
У меня есть одна моя старая функция для этого:
function putinplace($string=NULL, $put=NULL, $position=false){
$d1=$d2=$i=false;
$d=array(strlen($string), strlen($put));if($position > $d[0]) $position=$d[0];for($i=$d[0]; $i >= $position; $i--) $string[$i+$d[1]]=$string[$i];for($i=0; $i<$d[1]; $i++) $string[$position+$i]=$put[$i];return $string;}// Explanation
$string='My dog dont love postman';// string
$put="'";// put ' on position
$position=10;// number of characters (position)
print_r( putinplace($string, $put, $position));//RESULT: My dog don't love postman
Это небольшая мощная функция, которая выполняет свою работу без нареканий.
Просто хотел кое-что добавить: я нашел ответ Тима Купера очень полезным, я использовал его, чтобы создать метод, который принимает массив позиций и выполняет вставку для всех из них, вот так:
РЕДАКТИРОВАТЬ: похоже, моя старая функция предполагала, что$insertstrбыл только 1 символ, и что массив был отсортирован. Это работает для произвольной длины символа.
Это не работает. Ваше смещение предполагает, что $ interstr будет длиной всего 1 символ. Вам нужно добавить смещение в зависимости от длины вставки, начните с 0 и добавьте после substr. Кроме того, вы должны сортировать позиции по убыванию, чтобы это работало. Я исправил вашу функцию здесь, вы можете отредактировать свой код: pastebin.com/g9ADpuU4
Matthias S
@MatthiasS спасибо, в следующий раз просто отредактируй или предложи отредактировать, я не заметил этого до 2 лет спустя
$posEndне требуется Вопрос был о вставке подстроки после указанной позиции.
Styx
Да, но я сделал эту функцию для своего проекта. где мне нужно в одном месте заменить, а в другом просто вставить. Моя функция работает и для этого вопроса, так что я не могу понять, почему ты меня минус?
Иван Иван
0
Странные ответы здесь! Вы можете легко вставлять строки в другие строки с помощью sprintf [ссылка на документацию]. Функция очень мощная и может обрабатывать несколько элементов и других типов данных.
$color ='green';
sprintf('I like %s apples.', $color);
Это мило. но это не обрабатывает программный подход. Мы обычно имеем 'I like apples.'в качестве переменной. Таким образом, мы должны вставить %sсначала в строку, которые возвращаются к исходной задаче
substr
на PHP Руководствоисточник
Попробуйте, это будет работать для любого количества подстрок
источник
Используйте функцию stringInsert, а не функцию putinplace. Я использовал более позднюю функцию для анализа запроса MySQL. Хотя вывод выглядел хорошо, запрос привел к ошибке, которая заняла у меня некоторое время, чтобы отследить. Ниже приведена моя версия функции stringInsert, для которой требуется только один параметр.
источник
источник
using strpos to get the position of a substring
, так что наsubstring
первом месте. И он не сказал найти только одну позицию.У меня есть одна моя старая функция для этого:
Это небольшая мощная функция, которая выполняет свою работу без нареканий.
источник
Это было мое простое решение: добавить текст в следующую строку после того, как было найдено ключевое слово.
Вывод:
источник
Просто хотел кое-что добавить: я нашел ответ Тима Купера очень полезным, я использовал его, чтобы создать метод, который принимает массив позиций и выполняет вставку для всех из них, вот так:
РЕДАКТИРОВАТЬ: похоже, моя старая функция предполагала, что
$insertstr
был только 1 символ, и что массив был отсортирован. Это работает для произвольной длины символа.источник
Простой и еще один способ решить:
источник
источник
$posEnd
не требуется Вопрос был о вставке подстроки после указанной позиции.Странные ответы здесь! Вы можете легко вставлять строки в другие строки с помощью sprintf [ссылка на документацию]. Функция очень мощная и может обрабатывать несколько элементов и других типов данных.
дает вам строку
источник
'I like apples.'
в качестве переменной. Таким образом, мы должны вставить%s
сначала в строку, которые возвращаются к исходной задаче