[PHP] String nach bestimmten wörrtern durchsuchen, welche in MySQL Db hinterlegt sind

Akihisa

Well-known member
ID: 332118
L
21 Oktober 2008
165
13
Hi,
ich hab mal eine Frage.

Wie stelle ich es an einen beliebigen Text nach bestimmten Wörtern durchsuchen zu lassen, welche in einer Datenbank hinterlegt sind.
Kommt ein Wort aus der DB in dem Text vor, soll er das Wort durch den Inhalt aus der DB zu dem jeweiligen Wort ersetzen.

Also hier mal ein Beispiel:
Heute ist der 12.06.2009 und es ist 13.10 Uhr. Die Sonne scheint und es wird scheinbar ein schöner Tag am Steinhuder Meer.

In der Datenbank steht nun das Wort Sonne mit ID 1 und Beschreibung: Sonnenlicht, das Wort Tag mit ID 5 und Beschreibung: Gegenteil von Nacht und das Wort Steinhuder Meer mit ID 7 und Beschriebung: Größte Binnensee Nordwestdeutschlands.
Der Text soll nun überprüft werden und festgestellt werden, dass die beiden Wörter im Text sind.
Jetzt sollen die beiden Wörter durch den Inhalt der DB ersetzt werden.

Sprich es soll so aussehen, sofern die Wörter aus der DB enthalten sind:
Heute ist der 12.06.2009 und es ist 13.10 Uhr. Die Sonne (Sonnenlicht) scheint und es wird scheinbar ein schöner Tag (Gegenteil von Nacht) am Steinhuder Meer (Größte Binnensee Nordwestdeutschlands).

Wie stell ich das jetzt an?
Ich hab den ganzen Tag lang rumprobiert, bin aber zu keinem Ergebniss gekommen.

MfG Akihisa
 
Ist recht einfach. So könnte es zum Beispiel gehen:

Schritt 1: Mit mysql_query "SELECT wort, bedeutung FROM woerter" (ggf Tabellen/Spaltennamen anpassen!) und mysql_fetch_assoc das PHP-Array $wortliste füllen
Schritt 2: Dein Text mit mysql_query und mysql_fetch_assoc aus der Datenbank auslesen (zB in PHP-Variabel $text)
Schritt 3: Dann sowas wie foreach ($wortliste as $was) $text = str_replace($was['wort'], $was['wort'].' ('.$was['bedeutung'].')'); machen.
Fertig.

EDIT: Sollte es ärger mit Doppelersetzungen geben (wenn schon ersetze Wörter nochmals mit was anderen ersetzt werden), musst du zuerst alle Einträge von <Quelle> nach <Platzhalter-1..n> und dann von <Platzhalte-1..n> nach <Ziel> ersetzen.
 
Zuletzt bearbeitet:
Statt einer Schleife kann str_replace() auch direkt mit zwei Arrays gefüttert werden.
 
PHP:
$str = "Dies ist ein Example."
$parts = preg_split('/\s+/', $str); // am besten noch um weitere Dinge wie Kommas usw erweitern.
$values = array_map('mysql_real_escape_string', $parts);
$data = mysql_query('SELECT word, replacement FROM table WHERE word IN(' . implode(',', $values). ')');
// wie es weitergeht, wurde ja schon erwähnt

sicherlich nicht das non-plus-ultra aber bei kleinen Texten spart man sich schonmal alles auszulesen.