Antworten:
$newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);
$str = substr($oldstr, 0, $pos) . $str_to_insert . substr($oldstr, $pos);
Verwenden Sie die Funktion stringInsert anstelle der Funktion putinplace. Ich habe die spätere Funktion verwendet, um eine MySQL-Abfrage zu analysieren. Obwohl die Ausgabe in Ordnung aussah, führte die Abfrage zu einem Fehler, bei dem ich eine Weile gebraucht habe, um ihn aufzuspüren. Das Folgende ist meine Version der Funktion stringInsert, für die nur ein Parameter erforderlich ist.
function stringInsert($str,$insertstr,$pos)
{
$str = substr($str, 0, $pos) . $insertstr . substr($str, $pos);
return $str;
}
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 Aufgabe einwandfrei erfüllt.
Dies war meine einfache Lösung, um Text an die nächste Zeile anzuhängen, 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.
Ich wollte nur etwas hinzufügen: Ich fand die Antwort von Tim Cooper sehr nützlich. Ich habe sie verwendet, um eine Methode zu erstellen, die eine Reihe von Positionen akzeptiert und die Einfügung für alle von ihnen vornimmt, also hier:
BEARBEITEN: Es sieht so aus, als ob meine alte Funktion$insertstr
nur 1 Zeichen angenommen hat und das Array sortiert wurde. Dies funktioniert für eine beliebige 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;
}
Einfach und ein anderer Weg 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;
}
function insSubstr($str, $sub, $posStart, $posEnd){
return mb_substr($str, 0, $posStart) . $sub . mb_substr($str, $posEnd + 1);
}
$posEnd
wird nicht benötigt. Die Frage betraf das Einfügen eines Teilstrings nach der angegebenen Position.
Seltsame Antworten hier! Mit sprintf [Link zur Dokumentation] können Sie Strings einfach in andere Strings einfügen . Die Funktion ist äußerst leistungsfähig und kann auch mehrere Elemente und andere Datentypen verarbeiten.
$color = 'green';
sprintf('I like %s apples.', $color);
gibt Ihnen die Zeichenfolge
I like green apples.
'I like apples.'
als Variable. Also müssen wir %s
zuerst in den String einfügen , der zum ursprünglichen Problem zurückkehrt