• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Text innerhalb eines Textes an bestimmter Stelle einfügen

blabla333

Mitglied
Es wird ein DB (SQL) Feld (TEXT) eingelesen. Dieser Text ist nun folgendermaßen aufgebaut:

Code:
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

[sc titel="Apfel" parameter="irgendwelche"]
[sc titel="Birne" parameter="irgendwelche"]
[sc titel="Gurke" parameter="irgendwelche"]
[sc titel="Tomate" parameter="irgendwelche"]

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Ich möchte nun einen neuen Eintrag an der passenden Stell einfügen. Hierzu sollte der Titel des neuen Eintrages an der alphabetisch korrekten Position gesetzt werden. z.B. der Eintrag "Mango" [sc titel="Mango" parameter="irgendwelche"] sollte zwischen Gurke und Tomate gesetzt werden. ([sc] beinhaltet immer den parameter "titel", kann aber weiterhin noch andere optionale Parameter enthalten)

Ich habe nun zwei Probleme bei der Umsetzung:

1) Wie kann ich am Besten nur den relevanten Teil herausfiltern, d.h. nur den Teil, der die [sc xxx] beinhaltet? (und muss ich das denn überhaupt? Oder kann ich irgendwie mit dem gesamten String arbeiten?)

Ich würde dann diesen neuen Inhalt zeilenweise durchgehen und die neue Zeile entsprechend einfügen, so dass sich ein neuer String ergibt.
Hier mein zweites Problem:

2) Wie finde ich die alphabetisch korrekte Stelle?

Ich hätte hiernach einen neuen String mit den entsprechenden [sc xxx], die alphabetisch korrekt geordnet sind. Nun müsste ich wiederum den vorderen und hinteren Text hinzufügen (oder geht das geschickter) und haben dann den fertigen neuen Text, den ich in die Datenbank speichere.

Irgendwie habe ich das Gefühl, dass ich zu kompliziert denke - mal von meinen zwei Problemen abgesehen...
 
Zuletzt bearbeitet:
Ich glaube Du brauchst einen regulären Ausdruck um diese String aus dem Gesamtstring auszulesen. Dann kannst Du in den Fundstellen den neuen Text einfügen und per Suchen&Ersetzen wieder im Gesamttext einfügen. So ein regulärer Ausdruck wäre mit preg_match machbar. Auf PHP Live Regex könntest Du die Syntax selbst austesten.

Bitte verwende Code-Tags wenn Du Quellcode (oder in deinem Fall einen größeren Beispieltext) im Forum hinterlegen willst.
 
Mit
Code:
\[sc titel="(.+?)"\]
will es irgendwie nicht ganz funktionieren. Habe da bestimmt einen Denkfehler.

Aber wie kann ich die so ermittelten Zeilen dann alphabetisch ordnen bzw. meine neue Zeile an die richtige Stelle einbauen?

Und ich würde wahrscheinlich am Schluss den neuen String/Array per "preg_replace" anstelle der alten Zeilen einfügen. Muss mir dazu noch einen Ausdruck überlegen...
 
Damit kriegst Du ja ein Array als Ergebnis raus. Dieses kannst Du von den unnötigen Einträgen befreien, so dass Du ein Array erhältst, welches Du per PHP sortieren kannst (Funktion sort()).
 
Code:
\[sc titel="(.*?)" parameter="(.*?)"\]
Wie kann man den vorangehenden und anhängenden Text herausfiltern? Wenn ich das mit dem oben genannten Beispieltext ausprobiere, dann bekomme zu Beginn und am Ende je zwei leere Arrays innerhalb des Ergebnis-Arrays.

Edit: Das liegt wohl daran, dass die ersten und letzten beiden Zeilen kein positives Ergebnis liefern. Ich würde also aus dem Ergebnis-Array alle leeren Elemente entfernen. Oder gibt es die Möglichkeit den regulären Ausdruck entsprechend anzupassen? z.B. liefert er ja auch kein Ergebnis, wenn der Code mal einen Zeilenumbruch beinhaltet...
 
Zuletzt bearbeitet:
Zurück
Oben