web-dev-qa-db-de.com

String an der angegebenen Stelle einfügen

Gibt es eine PHP Funktion, die das kann?

Ich verwende strpos, um die Position eines Teilstrings zu ermitteln, und ich möchte nach dieser Position eine string einfügen.

232
Alex
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);

http://php.net/substr_replace

476
urmaul
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);

substr im PHP Handbuch

68
Tim Cooper

Probieren Sie es aus, es funktioniert für eine beliebige Anzahl von Teilzeichenfolgen

<?php
    $string = 'bcadef abcdef';
    $substr = 'a';
    $attachment = '+++';

    //$position = strpos($string, 'a');

    $newstring = str_replace($substr, $substr.$attachment, $string);

    // bca+++def a+++bcdef
?>
9
alexdets

Verwenden Sie die Funktion stringInsert anstelle der Funktion putinplace. Ich verwendete die spätere Funktion, um eine Mysql-Abfrage zu analysieren. Obwohl die Ausgabe in Ordnung aussah, führte die Abfrage zu einem Fehler, der eine Weile dauerte, bis ich ihn gefunden hatte. Das Folgende ist meine Version der Funktion stringInsert, die nur einen Parameter erfordert.

function stringInsert($str,$insertstr,$pos)
{
    $str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
    return $str;
}  
7
user2958137
str_replace($sub_str, $insert_str.$sub_str, $org_str);
3
xdazz

Ich habe eine meiner alten Funktionen dafür:

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

Dies ist eine kleine leistungsstarke Funktion, die ihre Arbeit einwandfrei erledigt.

Ich wollte nur etwas hinzufügen: Ich fand die Antwort von Tim Cooper sehr nützlich. Ich habe daraus eine Methode gemacht, die ein Array von Positionen akzeptiert und die Einfügung auf alle von ihnen macht.

EDIT:Sieht aus, als hätte meine alte Funktion angenommen, dass $insertstr nur ein Zeichen war und das Array sortiert war. Dies funktioniert bei beliebiger Zeichenlänge.

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;
}
3
chiliNUT

Dies war meine einfache Lösung und fügte Text in die nächste Zeile ein, nachdem das Schlüsselwort gefunden wurde.

$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!!!");

Ausgabe:

This is a test
#FINDME#
Insert this awesome string below findme!!!
Other text and data.
3
Lance Badger
function insSubstr($str, $sub, $posStart, $posEnd){
  return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}
1
Ivan Ivan

Einfach und auf andere Weise zu lösen:

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;

}  
1
jewelhuq

Seltsame Antworten hier! Mit sprintf [Link zur Dokumentation] können Sie Strings problemlos in andere Strings einfügen. Die Funktion ist extrem leistungsfähig und kann auch mehrere Elemente und andere Datentypen verarbeiten.

$color = 'green';
sprintf('I like %s apples.', $color);

gibt dir die Zeichenfolge

I like green apples.
0
Sliq