Autor Zpráva
Fisak
Profil
dobrý den. Mám $text = "Ahoj *1* jak se máš *2* já docela dobře *3* ale mohlo by být lépe *1*" a ten bych potřeboval převést na "Ahoj <img src="1.png" /> jak se máš <img src="2.png" /> já docela dobře <img src="3.png" /> ale mohlo by být lépe <img src="1.png" />".
Vím že to jde udělat preg_match_all ale moje pokusy jsou marné... za 1. nevím přesně jak má vypadat ten regulérní výraz a jak to pak vypsat..
Je to blbost ale můj pokus byl toto:
$text = "Ahoj *1* jak se máš *2* já docela dobře *3* ale mohlo by být lépe *1*";
    $arr = preg_match_all('~*.*?'.'*~', $text, $matches);
    foreach ($arr as &$value) {
    echo "<img src=\".$value.".png\" />";  
    }
Jan Tvrdík
Profil
Fisak:
preg_replace_callback


preg_replace_callback('~\*(\d+)\*~', function ($m) {
    return sprintf('<img src="%d.png" />', $m[1]);
}, $text);
Fisak
Profil
Jan Tvrdík:
paráda funguje to a pokud bych chtěl dát popisek toho obrázku do title="*cislo*" tak pokud to napíšu takto:
preg_replace_callback('~\*(\d+)\*~', function ($m) { return sprintf('<img src="/images/chat-smiles/%d.gif" title="*%d*" />', $m[1]); }, $echo_chat->text);
tak to bohužel nefunguje.. proč?


jinak děkuji moc :-)
Jan Tvrdík
Profil
Fisak:
tak to bohužel nefunguje.. proč?
Protože sis byl líný přečíst dokumentaci ke sprintf.
Fisak
Profil
Jan Tvrdík:
čtu a čtu a stále nenalézám odpověď..
Jan Tvrdík
Profil
Fisak:
Když neumíš použít sprintf, tak ho prostě nepoužívej :) Dokonce to bude kratší:
return '<img src="/images/chat-smiles/' . $m[1] . '.gif" title="*' . $m[1] . '*" />';
return sprintf('<img src="/images/chat-smiles/%d.gif" title="*%d*" />', $m[1], $m[1]);
Fisak
Profil
Jan Tvrdík:
Díky moc :-)
1Pupik1989
Profil
A proč preg_replace_callback?

$text = "Ahoj *1* jak se máš *2* já docela dobře *3* ale mohlo by být lépe *1*";

$text = preg_replace('~\*(\d+)\*~',"<img src='\\1.png' />",$text);
Jan Tvrdík
Profil
1Pupik1989:
A proč preg_replace_callback?
To bude tím, že jsem přepracovaný :) Máš samozřejmě pravdu, že tady stačí obyčejný preg_replace.
Radek9
Profil
Fisak:
Jinak, ještě trošku puntičkářství. Nejsou to regulérní výrazy, nýbrž regulární. ;-)
Fisak
Profil
Radek9:
Dobře pro příště vím :-)

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