phpbar.de logo

Mailinglisten-Archive

[php] acronyme und abkürzungen aus DB

[php] acronyme und abkürzungen aus DB

Yannik Hampe yannik at cipher-code.de
Don Nov 15 16:34:41 CET 2007



Jörn Grube wrote:
> Ich hab mal wieder ein Problem und brauch Denkhilfen :)
> Mal vorweg: auf meinem Server läuft PHP 4.4.7 und daran kann ICH nichts 
> ändern (Hosteurope ist der Hoster).
> 
> Ok, ich habe eine Lexikontabelle. Darin sind noch nicht viele Begriffe, 
> werden aber grob geschätzt um die 1.000 Einträge werden.
> 
> In den Texten (die teilweise auch aus der DB kommen, teilweise auch aus 
> externen Dateien, die dann included werden) sollen darin vorkommende 
> Abkürzungen eben mit dem abbr-Tag ersetzt werden (ich bin echt zu faul, 
> das in jedem Text von Hand zu machen *ggg* und wo die Tabelle doch nun 
> sowieso schon vorhanden ist ...).
> 
> Aber wie stell ich das an?
> Ich müsste jedes Wort des Textes durch eine Funktion schubsen, die 
> nachguckt, ob das in der Datenbank enthalten ist. Wirkt bei längeren 
> Texten bestimmt nicht unbedingt als Gaspedal :( Dann ersetzen und 
> schließlich den Text ausgeben.
> Mir gehts eigentlich nur darum, wie ich möglichst schnell und ohne den 
> Server zu sehr in die Knie zu zwingen an die Ersetzungen komme, wie ich 
> dann ersetze und ausgebe ist mir klar. Hab schon auf diversen Seiten 
> nach entsprechenden Klassen geguckt, aber nix gefunden.

Naja... Ich könnte mir vorstellen, dass dies am schnellsten wäre:
$text ='ich bin ein text in dem was ersetzt werden soll';
$db =...; //db-Link
while ($row = $db->query('SELECT wort,replace FROM ...'))
{
   $worte[] =$row[0];
   $neu[] ="<abbr ..>$row[0]</...>";
}
str_replace($worte, $neu, $text);

CPU mäßig sollte das sehr sparsam sein. Der Ramverbauch ist bei 1K 
Wörtern dabei noch vertretbar gering.
Du könntest allerdings nochmal was rausholen, wenn du die acronyme nicht 
in einer DB, sondern in einer Datei speicherst. Am einfachsten wäre wohl 
eine Datei mit einem Wort pro Zeile:
---- Datei Worte
wort1
wort2
...
---- Datei Ersatz
<abbr ...>wort1</abbr>
<abbr ...>wort2</abbr>
...

Dann kannst du per
str_replace(file('Worte'),file('Ersatz'),$text);
sehr einfach und schnell ersetzen. Solange es nur 1000 Wörter sind, 
sollte die Methode vom RAM her keinen Stress machen. Dafür musst du 
immer die beiden Dateien synchron halten. Aber ich gehe davon aus, dass 
das kein Problem ist, da du die Dateien nicht ständig änderst. Du 
solltest ggf. flock() verwenden.

> 
> LG aus Berlin Jörn

Yannik

php::bar PHP Wiki   -   Listenarchive