Esta debería ser la respuesta aceptada. Las funciones integradas tienen prioridad sobre las funciones creadas por el usuario cualquier día.
Benjam
13
Sí, el cuarto argumento es "0" y hace que la cadena de reemplazo se inserte sin sobrescribir ninguna de las cadenas originales.
Buttle Butkus
77
Brillante respuesta. Pero para la gente perezosa (como yo) debería haber una breve explicación en tu publicación. Lo haré ahora y copiaré y pegaré desde php.net: "Por supuesto, si la longitud es cero, esta función tendrá el efecto de insertar un reemplazo en una cadena en el desplazamiento de inicio dado".
Wolfsblvt
77
Cuidado: ¡la función substr_replace () no es segura para varios bytes! Su $ pos puede resultar estar en el medio de un personaje UTF-8. Puede que necesite emplear la solución de @ tim-cooper pero usando mb_substr ().
Use la función stringInsert en lugar de la función putinplace. Estaba usando la función posterior para analizar una consulta mysql. Aunque el resultado se veía bien, la consulta resultó en un error que me llevó un tiempo rastrear. La siguiente es mi versión de la función stringInsert que requiere solo un parámetro.
@minitech El operador dijo using strpos to get the position of a substring, así que lo substringprimero es lo primero. Y no dijo que encontrara solo una posición.
xdazz
3
Tengo una de mis antiguas funciones para eso:
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
Esta es una función pequeña y potente que realiza su trabajo sin problemas.
Solo quería agregar algo: la respuesta de tim cooper me pareció muy útil, la usé para hacer un método que acepta una variedad de posiciones y hace la inserción en todas ellas, así que aquí está:
EDITAR: Parece que mi antigua función asumía que$insertstrsolo tenía 1 carácter y que la matriz estaba ordenada. Esto funciona para la longitud de caracteres arbitraria.
Esto no funciona. Su desplazamiento supone que $ interstr tiene solo 1 carácter de longitud. Debe agregar desplazamiento según la longitud de la inserción, comenzar con 0 y agregar después de la substr. Además, debe ordenar las posiciones de menor a mayor para que funcione. Corregí su función aquí, es posible que desee editar su código: pastebin.com/g9ADpuU4
Matthias S
@MatthiasS gracias, la próxima vez que solo edite o sugiera editar, no me di cuenta hasta 2 años después
$posEndes innecesario La pregunta era sobre insertar una subcadena después de la posición especificada.
Styx
Sí, pero hice esta función para mi proyecto. donde necesitaba en algún lugar reemplazar y en otro simplemente insertar. Mi función también funciona para esta pregunta, así que no puedo entender por qué me hiciste menos?
Ivan Ivan
0
¡Respuestas extrañas aquí! Puede insertar cadenas en otras cadenas fácilmente con sprintf [enlace a la documentación]. La función es extremadamente poderosa y puede manejar múltiples elementos y otros tipos de datos también.
$color ='green';
sprintf('I like %s apples.', $color);
Eso es bueno. pero no maneja un enfoque programático. Generalmente tenemos 'I like apples.'como una variable. Así que tenemos que insertar %sprimero en la cadena, que vuelve al problema original
substr
en PHP Manualfuente
Pruébelo, funcionará para cualquier número de subcadenas
fuente
Use la función stringInsert en lugar de la función putinplace. Estaba usando la función posterior para analizar una consulta mysql. Aunque el resultado se veía bien, la consulta resultó en un error que me llevó un tiempo rastrear. La siguiente es mi versión de la función stringInsert que requiere solo un parámetro.
fuente
fuente
using strpos to get the position of a substring
, así que losubstring
primero es lo primero. Y no dijo que encontrara solo una posición.Tengo una de mis antiguas funciones para eso:
Esta es una función pequeña y potente que realiza su trabajo sin problemas.
fuente
Esta fue mi solución simple también agregar texto a la siguiente línea después de encontrar la palabra clave.
Salida:
fuente
Solo quería agregar algo: la respuesta de tim cooper me pareció muy útil, la usé para hacer un método que acepta una variedad de posiciones y hace la inserción en todas ellas, así que aquí está:
EDITAR: Parece que mi antigua función asumía que
$insertstr
solo tenía 1 carácter y que la matriz estaba ordenada. Esto funciona para la longitud de caracteres arbitraria.fuente
Simple y otra forma de resolver:
fuente
fuente
$posEnd
es innecesario La pregunta era sobre insertar una subcadena después de la posición especificada.¡Respuestas extrañas aquí! Puede insertar cadenas en otras cadenas fácilmente con sprintf [enlace a la documentación]. La función es extremadamente poderosa y puede manejar múltiples elementos y otros tipos de datos también.
te da la cuerda
fuente
'I like apples.'
como una variable. Así que tenemos que insertar%s
primero en la cadena, que vuelve al problema original