Denkprobleme/preg anfänger

sorashi

Mitglied
Hi, also mein problem ist folgendes.
Ich habe Smilies in einer Tabelle gespeichert, also so:
id, zeichen (z.B. ;) <- also den code von dem -.-), dateiname, beschreibung

Soo, jetzt will ich einfach, dass er eben einen Text nach allen Smiliezeichen durchsucht und sie dann bei der Ausgabe durch den entsprechenden Smilie ersetzt.
Doch irgendwie weiß ich nicht, wie ich weiter machen soll -.-
PHP:
   function smilies($text,$path="./smilies") {
      $this->result=mysql_query("SELECT smilieid, smiliecode, smiliedatei, smilietext FROM news_smilies");
      while($row=mysql_fetch_array($result)) {
         ?
      }
      return ;
   }

Naja sehr weit bin ich net, aber ich steh voll aufm Schlauch. Ich denk mir dass es mit preg geht, aber ich bin gerade am erlernen von preg.
Früher hab ich jedes Smilie einzeln in den quellcode hinzugefügt, aber das ist nicht wirklich das wahre.

Könnte mir jemand helden ?
 
PHP:
function smilies($text,$path="./smilies") { 
      $this->result=mysql_query("SELECT smilieid, smiliecode, smiliedatei, smilietext FROM news_smilies"); 
      while($row=mysql_fetch_array($result)) { 
         $text = str_replace($row["smiliecode"], "<img src=\"".$row["smiliedatei"]."\" border=0 alt=\"\">", $text);
      } 
      return $text;
   }

Du benötigst gar kein preg_replace.
str_replace tuts genauso...

http://de.php.net/str_replace
 
Zuletzt bearbeitet:
Der Code von Daxi ist falsch, des weiteren verändere ich die Funktion so das sie optimiert wird ;)
PHP:
<?php
function smilies($text,$path="./smilies") {
    static $smilie_code, $smilie_file;

    /* fetch the smilies if they are not already set */
    if (!isset($smilie_code) && !isset($smilie_file)) {
        $result = mysql_query('SELECT smilieid, smiliecode, smiliedatei, smilietext FROM news_smilies');
        while($smilie = mysql_fetch_array($result)) {
            $smilie_code[] = $smilie['smiliecode'];
            $smilie_file[] = $smilie['smiliedatei']; 
        }
    }

    /* replace the smilies */
    $max = count($smilie_code);
    for ($i = 0; $i < $max; $i++) {
        $text = str_replace($smilie_code[$i], '<img src="' . $smilie_file[$i] . '" border=0 alt="">', $text);
    }

    return $text; 
}
?>
So das wars dann auch:)
 
Zuletzt bearbeitet:
Gut, ein kleiner Fehler war drin.
Aber was soll an deinem Code denn besser sein

Wieso machst du das so umständlich, in dem du noch mal ein Array generierst?

Meines erachtens nach unnötig...
 
Weil du die Funktion sicherlich mehrfach anwendest, und wenn du die Funktion 10x aufrufst dann wird die DB 10x gequeryt und das muss nicht sein, ich hab es so gelöst das die Smilies in eine statische Variable gelesen werden und somit muss die DB nur 1x gequeryt werden!
 
ähm jo, thx jungs
Mit Daxi's funktions gehts schon, außer halt des mit dem $text = str_replace ...
aber des hab ich schon selbst lösen können -.- (ich Meister)
hätt nicht gedacht, dass es so einfach geht -.-
Naja das Problem des zu kompliziert denkens muss ich noch lösen

mowl, thx für die optimierung.
 
Zurück