Autor Zpráva
zvěřiňák
Profil
Potřeboval bych poradit, jak tohle vyřešit trochu elegantněji.
$zaznam["vzkaz"] = str_replace("*01*", "<img src='images/01.gif' alt='smajlik'>", $zaznam["vzkaz"]);

To samozřejmě funguje, ale těch smajlíků je 50. Psát to 50x se mi nechce, ale nevím, jak to udělat jinak.
__construct
Profil
<?php
$zaznam["vzkaz"] = "Lorem *49* ipsum *7* dolor sit amet";
$regexp = '/\*(\d+)\*/';
$nahrada = "<img src='images/$1.gif' alt='smajlik'>";
echo preg_replace($regexp, $nahrada, $zaznam["vzkaz"]);
?>
zvěřiňák
Profil
__construct:
Díky. Funguje to perfektně.
BuGeR
Profil
A nešlo by to takto?:)
for($c=1;$c<=50;$c++) {
   if($c<10) { $c = "0".$c; }
   $zaznam["vzkaz"] = str_replace("*".$c."*", "<img src='images/".$c.".gif' alt='smajlik'>", $zaznam["vzkaz"]);
}
Nox
Profil
Asi jo, ale je to krkolomný, neelegantní a nejspíš i pomalejší.... __constructův je sice regexpem, ale zas se to projde jednou, tvým kódem se text projde 50x, ikdyž nejspíš rychlejší funkcí
Leopik 2x
Profil
__construct:
A ak budem písať text a napíšem *slovo* tak to nahradí aj to a to asi nie je žiadané.
Yur4Y
Profil
Leopik 2x:
Určite? Má tam predsa \d.
Leopik 2x
Profil
To máš pravdu, ale keď to bude *9999* tak to vráti images/9999.gif
BuGeR
Profil
Tak tam zkus hodit podmínku, že pokud to číslo je buď větší a nebo se rovná 1 a menší nebo se rovná 50;)
zvěřiňák
Profil
No, já tam ty smajlíky vkládám takhle:
<img onclick="policko.value+=' *01* '; pocitani()" alt="01" title="01" src="images/01.gif">

A na jejich zobrazování jsem měl krkolomnej js, takže jsem původně chtěl vymyslet zobrazování cyklem for, jako napsal BuGeR.
Ale ten způsob, který vymyslel __construct je opravdu elegantnější a ještě včera jsem ho dal na web a funguje dobře.
Majkl578
Profil
Leopik 2x, BuGeR:
Co tenhle regulár? ~\*([1-9]|[1-4]\d|50)\*~
__construct
Profil
Leopik 2x:
To máš pravdu, ale keď to bude *9999* tak to vráti images/9999.gif
áno a to ako vadí ?? Neviem prečo riešiš takú nepodstatnú vec. Čo keď sa časom rozhodne pridať 10 ďalších smajlov ?

BuGeR:
Tak tam zkus hodit podmínku, že pokud to číslo je buď větší a nebo se rovná 1 a menší nebo se rovná 50;)
Kontrolovať to podmienkou je zbytočné zdržiavanie - ten regexp čo napísal Majkl578 by bolo najelegantnejšie riešenie - ale nevšimol si toho, že obrázky sú číslované *01* - takže
\*([1-9]|[0-4]\d|50)\*

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0