Bestimmtes Zeichen in einem String suchen und dannach erst ersetzen.

xtramen01

Erfahrenes Mitglied
Hallo Leute,

ich habe ein Funktion welche mir bestimmte Zeichen durch Grafiken ersetzt.
SO will ich die Preise in meinem kleinen Shop etwas schöner gestalten.

Das Funktioniert Super.

Nun würde ich aber gerne das alles was nach dem Komma kommt mit anderen Grafiken ersetzt wird (mit kleineren). Also bei 1,99 Euro z.b. den 1 Euro mit großen Grafiken und die 99 Cent mit kleineren Grafiken.

Momentan kann ich aber überall nur die gleichen Grafiken verwenden. Da ich nicht weis wie ich das machen soll.

Ich denke man müsste schauen, wo im String ein Komma vorkommt (Kein Problem eigentlich) und alle Zeichen dannach mit $x ersetzen und alle davor mit $y ersetzen.

Finde aber keinen Ansatz dafür :-(

PHP:
function ersetze_mit_grafik($numeral=''){
    $replace = array (
      '0' => image($this->images . '0.gif', $this->alt),
      '1' => image($this->images . '1.gif', $this->alt),
      '2' => image($this->images . '2.gif', $this->alt),
      '3' => image($this->images . '3.gif', $this->alt),
      '4' => image($this->images . '4.gif', $this->alt),
      '5' => image($this->images . '5.gif', $this->alt),
      '6' => image($this->images . '6.gif', $this->alt),
      '7' => image($this->images . '7.gif', $this->alt),
      '8' => image($this->images . '8.gif', $this->alt),
      '9' => image($this->images . '9.gif', $this->alt),
      '.' =>  image($this->images . 'point.gif', $this->alt),
      ',' =>  image($this->images . 'comma.gif', $this->alt),
      ' ' =>  image($this->images . 'space.gif', $this->alt),
      '$' => image($this->images . 'dollar.gif', $this->alt),
      'EUR' => image($this->images . 'eur.gif', $this->alt),
      );
    return strtr($numeral, $replace);
    }

Hat jemand eine Idee?

Gruß und Danke
 
Kurze Frage: Liest du die Preise nicht aus der DB aus zu den jeweiligen Artiekln? Wenn ja, dann würde ich da einfach eine while-Schleife basteln, ich welcher das ganze ausgeführt wird. Also so irgendwie:

PHP:
while ($row = mysql_fetch_array ($result)) 
{
$preis = explode(',',$row['preisausderdb']);

print '<img src="'$preis[0]'"><img src="'$preis[1]'">';
}
 
Ich würde den Preis-String sauber mittels Regulärem Ausdruck in seine Einzelteile zerlegen und durchgehen. So kann man für jeden Teil bestimmen welche Grafiken verwednet werden sollten. Su dass die Währung zum Beispiel wieder die normale Grösse hat. etc.

PHP:
<?php 

$string = "123.45 EUR";
echo ersetze_mit_grafik($string);


function ersetze_mit_grafik($numeral=''){
    $specialChars = array('.' =>  'point.gif',
                          ',' =>  'comma.gif',
                          ' ' =>  'space.gif',
                          '$' =>  'dollar.gif',
                          'EUR' => 'eur.gif');
    
    $pattern = '/^([[:digit:]]*)([\.,])([[:digit:]]*)([ ]?)(.*)$/is';
    
    if(preg_match($pattern, $numeral, $parts)){
        //$files:   Array mit allen Grafikdateinamen
        //$alt:     Die Alternativ-Texte zu den Grafiken
        
        //Vorkamstellen
        $files  = replaceEachDigitWithGrafik($parts[1], '.gif');
        $alt = str_split($parts[1]);
        //Trennzeichen
        $files[] = strtr($parts[2], $specialChars);
        $alt[] = $parts[2];
        //Nachkomastellen
        $files  = array_merge($files, replaceEachDigitWithGrafik($parts[3], '_small.gif'));
        $alt = array_merge($alt, str_split($parts[3]));
        //Leerzeichen
        $files[] = strtr($parts[4], $specialChars);
        $alt[] = $parts[4];
        //Währung
        $files[] = strtr($parts[5], $specialChars);
        $alt[] = $parts[5];

        //Die Grafik-Tags erstellen
        $retVal = array_map('createImg', $files, $alt);        
        
        //Zu einem String zusammenfassen und zurückgeben
        return implode('', $retVal);        
    }
    
}

/**
 * jedes Zeichen der Eingabe mit einem String zum Grafiknamen ersetzen
 * @param $number   String              Zahl die in ihre Einzelteile zerlegt werden sollte
 * @param $suffix   String              Suffix für den Dateinamen
 * @return          Array<String>       Ein Array mit allen Dateinamen der einzelnen Stellen
 */
function replaceEachDigitWithGrafik($number, $suffix){
    foreach(str_split($number) as $digit){
        $digits[] = $digit.$suffix;
    }
    return $digits;
}

/**
 * Funktion für den array_map() der aus jedem Dateinamen und Alt-Text ein img-Tag erstellt
 * @param $filename String
 * @param $alt      String
 * @return          String
 */
function createImg($filename, $alt){
    //return image($this->images . $item, $alt);
    return  "<img src='{$filename}' alt='{$alt}'/>";
}

?>
 
Zurück