Respuestas:
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);
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.
function stringInsert($str,$insertstr,$pos)
{
$str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
return $str;
}
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.
Esta fue mi solución simple también agregar texto a la siguiente línea después de encontrar la palabra clave.
$oldstring = "This is a test\n#FINDME#\nOther text and data.";
function insert ($string, $keyword, $body) {
return substr_replace($string, PHP_EOL . $body, strpos($string, $keyword) + strlen($keyword), 0);
}
echo insert($oldstring, "#FINDME#", "Insert this awesome string below findme!!!");
Salida:
This is a test
#FINDME#
Insert this awesome string below findme!!!
Other text and data.
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.
function stringInsert($str, $pos, $insertstr) {
if (!is_array($pos)) {
$pos = array($pos);
} else {
asort($pos);
}
$insertionLength = strlen($insertstr);
$offset = 0;
foreach ($pos as $p) {
$str = substr($str, 0, $p + $offset) . $insertstr . substr($str, $p + $offset);
$offset += $insertionLength;
}
return $str;
}
Simple y otra forma de resolver:
function stringInsert($str,$insertstr,$pos)
{
$count_str=strlen($str);
for($i=0;$i<$pos;$i++)
{
$new_str .= $str[$i];
}
$new_str .="$insertstr";
for($i=$pos;$i<$count_str;$i++)
{
$new_str .= $str[$i];
}
return $new_str;
}
function insSubstr($str, $sub, $posStart, $posEnd){
return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}
$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.
$color = 'green';
sprintf('I like %s apples.', $color);
te da la cuerda
I like green apples.
'I like apples.'
como una variable. Así que tenemos que insertar %s
primero en la cadena, que vuelve al problema original