Autor Zpráva
Taps
Profil
Zdravím, pomocí funkce str_replace jsem chtěl nahradit částky 50,100,150... za slovo padesát,sto, stopadesát. Pokud zadám částku 50 tak je to v poho...ale když zadám 150 tak mi str_replace vyhodí 1padesát. Mohl by mi prosím někdo poradit jak to mám vyřešit. díkes
Timy
Profil
Asi bude nejlepší nejdřív nahradit 150 za stopadesát a až pak 50 za padesát.
Taps
Profil
Timy
NO jo, ale když tam jsou částky jako 250, 350,450. Tak to asi nepůjde tak vyřešit.
DoubleThink
Profil *
Nebo použít preg_replace a specifikovat lépe vzor pro nahrazení (brát jenom celá čísla, ne jejich části)
Taps
Profil
Timy
Nešlo by to třeba nějak pomocí pole (array)?
TFSi
Profil
Nahrazuj od nejvyšších, po nejnižší. Potom to půjde
Kcko
Profil
Tak to zkus takhle


$trans = array(50 => "padesát", 100 => "sto", 150 => "stopadesát");
echo strTr("v kapse mam tyto bankovky 50 - 100 - 150", $trans);
djlj
Profil
Kcko
echo strTr("A co když mám v kapse bankovky 150, 100 a 50? TO fungovat nebude, ne?", $trans);
anode
Profil
Nemůžete ty částky vyhledávat jako prosté znaky, pak samozřejmě bude záležet na pořadí. Musíte brát v potaz i okolí cifer, nejlépe regulárním výrazem, ideálně pomocí funkce preg_replace_callback. A ještě dám hint - použijte word boundaries (znaky pro hranice slov).

EDIT: Tak pardon, naivně jsem předpokládal, že autor předchozího postu zkoušel, co píše. Heh, fakt dobrý přístup. Nicméně funkce strtr nahrazuje od delších ke kratším řetězcům, takže fungovat bude správně.

PHP manuál: strtr() will always look for the longest possible match first and will *NOT* try to replace stuff that it has already worked on.
Kcko
Profil
djlj

bude .. vyzkousel jsem, nebyl jsem si tim uplne jistej a kdyz nejsem tak testnu ..takze to frci v poho 8)
djlj
Profil
Tak pardon, naivně jsem předpokládal, že autor předchozího postu zkoušel, co píše. Heh, fakt dobrý přístup.
Pokud myslíš mě, tak ne, nezkoušel. Jak je možno si povšimnouti, uvedl jsem za svůj příspěvek otazník, jenž tvoří větu tázací. Myslel jsem si totiž to samé, co ty — že záleží na pořadí.
Taps
Profil
Kcko
djlj
Díky

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