В листинге ниже приведен PHP код функции вставки одной строки в другую в определенную позицию по номеру символа.
Пояснения по использованию функции
Вызов echo insertStringPos("a123","xxxx",2); вернёт следующее значение: a1xxxx23. То есть в качестве первого параметра функции передаётся строка в которую осуществляется вставка, в качестве второго параметра строка которая вставляется, в качестве третьего параметра номер символа после которого осуществляется вставка. Если в качестве третьего параметра передавать 0, то будет производиться вставка в начало строки. Обратите внимание UTF-8 символы могут состоять из 2-х символов(например буквы русского алфавита), таким образом если Вы определили начало некоторого символа и передаёте и передаёте это число рассматриваемой функции, то вставка может быть осуществлена в разрыв UTF-8 символа и данная ситуация может привести к некорректному отображению символа(иногда к появлению иероглифов), таким образом передавать необходимо именно номер символа после которого осуществляется вставка. Например если в исходной строке у нас 2 символа(не имеются ввиду UTF-8 символы, а символы из одного байта) то для вставки новой строки посередине исходной, необходимо передать в качестве позиции вставки цифру 1.
Ошибочные ситуации при работе с функцией
Функция возвращает false всего в двух случаях: 1) если позиция для вставки превышает количество символов в исходной строке; 2) если позиция для вставки отрицательное число.
Логика работы функции
Логика функции включает в себя преобразование входящих типов данных, не предусмотренных для целей использования функции. Так если в качестве первого или второго параметра передать объект, то внутри функции он будет преобразован в пустую строку, а если объект передать в качестве третьего параметра то преобразован в 0. Таким образом ошибки, в результате которых функция возвращает false описаны выше. Преобразование входящих данных внутри функции осуществляется с второй по четвёртую строки функции. Так же у третьего входящего параметра отбрасывается дробная часть, то есть если третий параметр передан как 4.6 то он будет преобразован в 4, что при переданном первом параметре из 4-х символов(однобайтовых) не приведёт к возникновению ошибки работы функции, иначе бы строка if (($pos < 0) or ($pos > $contentLength)) {return false;} вернула false в качестве результата работы функции.