Dies sollte die akzeptierte Antwort sein. Integrierte Funktionen haben jeden Tag Vorrang vor vom Benutzer erstellten Funktionen.
Benjam
13
Ja, das vierte Argument "0" bewirkt, dass die Replaecment-Zeichenfolge eingefügt wird, ohne dass die ursprüngliche Zeichenfolge überschrieben wird.
Buttle Butkus
7
Geniale Antwort. Aber für faule Leute (wie mich) sollte es vielleicht eine kurze Erklärung in Ihrem Beitrag geben. Ich mache es jetzt und kopiere und füge es von php.net ein: "Wenn die Länge Null ist, hat diese Funktion natürlich den Effekt, dass beim angegebenen Startversatz eine Ersetzung in den String eingefügt wird."
Wolfsblvt
7
Achtung: Die Funktion substr_replace () ist nicht multibyte-sicher! Ihr $ pos befindet sich möglicherweise mitten in einem UTF-8-Zeichen. Möglicherweise müssen Sie die Lösung von @ tim-Cooper verwenden, aber mb_substr () verwenden.
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.
@minitech Die Operation sagte using strpos to get the position of a substring, also substringkommt die zuerst. Und er sagte nicht, nur eine Position zu finden.
Xdazz
3
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.
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$insertstrnur 1 Zeichen angenommen hat und das Array sortiert wurde. Dies funktioniert für eine beliebige Zeichenlänge.
Das funktioniert nicht. Ihr Offset geht davon aus, dass $ interstr nur 1 Zeichen lang ist. Sie müssen den Offset abhängig von der Länge der Einfügung hinzufügen, mit 0 beginnen und nach dem Teil hinzufügen. Außerdem sollten Sie die Positionen niedrig bis hoch sortieren, damit es funktioniert. Ich habe Ihre Funktion hier korrigiert. Vielleicht möchten Sie Ihren Code bearbeiten: pastebin.com/g9ADpuU4
Matthias S
@ MatthiasS danke, das nächste Mal nur bearbeiten oder vorgeschlagen zu bearbeiten, habe ich dies erst 2 Jahre später
$posEndwird nicht benötigt. Die Frage betraf das Einfügen eines Teilstrings nach der angegebenen Position.
Styx
Ja, aber ich habe diese Funktion für mein Projekt gemacht. wo ich an einer Stelle ersetzen und an einer anderen nur einfügen musste. Meine Funktion funktioniert auch für diese Frage, also kann ich nicht verstehen, warum du mich minus hast?
Ivan Ivan
0
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);
Das ist schön. Ein programmatischer Ansatz wird jedoch nicht behandelt. Wir haben normalerweise 'I like apples.'als Variable. Also müssen wir %szuerst in den String einfügen , der zum ursprünglichen Problem zurückkehrt
substr
im PHP-Handbuchquelle
Probieren Sie es aus, es funktioniert für eine beliebige Anzahl von Teilzeichenfolgen
quelle
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.
quelle
quelle
using strpos to get the position of a substring
, alsosubstring
kommt die zuerst. Und er sagte nicht, nur eine Position zu finden.Ich habe eine meiner alten Funktionen dafür:
Dies ist eine kleine leistungsstarke Funktion, die ihre Aufgabe einwandfrei erfüllt.
quelle
Dies war meine einfache Lösung, um Text an die nächste Zeile anzuhängen, nachdem das Schlüsselwort gefunden wurde.
Ausgabe:
quelle
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.quelle
Einfach und ein anderer Weg zu lösen:
quelle
quelle
$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.
gibt Ihnen die Zeichenfolge
quelle
'I like apples.'
als Variable. Also müssen wir%s
zuerst in den String einfügen , der zum ursprünglichen Problem zurückkehrt