Mailinglisten-Archive |
Hi, > Vielen Dank erstmal für die ganzen Antworten. > Ich habe mich wohl ein wenig blöd ausgedrückt. Im Moment habe ich eine > Datei, in der für jeden Platzhalter ein str_replace angelegt ist. > In dieser > Datei gibt es inzwischen über 200 dieser Befehle z.B.: > > $templine = str_replace("%total_online%", $total_online, $templine); > > Deshalb dauert es beim durchlaufen der Schleife, in der die Platzhalter > ersetzt werden viel zu lange. Ich suche nun nach einer Funktion, die den > Platzhalter erkennt und ihn durch den Inhalt der gleichnamigen Variablen > ersetzt. Also nur noch einen str_replace oder ereg_replace > Befehl, nicht wie > im Moment für jeden Platzhalter. Nur leider weiß ich nicht, wie ich dies > realisieren kann. Deine Schleife ist wohl deshalb so aufwendig, weil dein String andauernd koppiert wird. Soviel ich weiss, wird beim Aufruf von str_replace wird eine Kopie von $templine übergeben, in dieser Kopie wird ersetzt und das Ergebnis dann wieder $templine genannt. (wenn das bei php doch anders ist, korrigiere mich bitte jemand) Je nach länge von $templine dauert das natürlich etwas und verbrät ordentlich Speicher... Alternativ könntest du dein String mit etwas "Handarbeit" linear durchparsen. Du suchst das erste "%" (mit strpos) und gibst den Teil unverändert aus (mit substr), dann weiter zum nächsten % und die entsprechende Variable ausgeben und so weiter... das sieht zwar im Code nicht toll aus, weil du mit Offsets und Längen rumwirbeln musst, ist aber bedeutend schneller, da PHP keine Kopien anlegen muss und die abgearbeiteten Teile schonmal auf die Reise zum Client gehen können. Wenn du Zeit hast, die in die xml-Parser-Funktionen einzuarbeiten, kannst du für deine Templates auch xml nutzen und die "Handarbeit" von einem xml-parser erledigen lassen. Das ist recht flexibel und flott (aber für deine Zwecke vieleicht schon wieder zu viel des Guten). Gerald.
php::bar PHP Wiki - Listenarchive