Autor Zpráva
WMPopi
Profil
Ahoj,
řeším takový zvláštní problém - uživatel jedné aplikace má mít možnost si sestavovat vlastní vzorce pro výpočet čehosi. Názorně ukážu:

v db mám uloženo slovně:
"(castka * 12 * koeficient) / 100"

potřebuju z toho dostat něco ve stylu:
$pocet = ($zaznam["castka"] * 12 * $zaznam["koeficient"]) / 100;


Nenapadá někoho jak na to?
deathhead
Profil *
regulární výrazy by mohla být pravá volba, nebo si to vyzobej pomocí operací s řetězci
WMPopi
Profil
deathhead:
nebo si to vyzobej pomocí operací s řetězci

takhle mě to taky napadlo, chtěl jsem použít explode() po mezerách, ty slovní "proměnné" doplnit o zaznam.. ale pak nevím jak bych to složil, protože:

$pocet = $x[0] $x[1] $x[2];
je blbina.. nevím jak tam dostat to znamínko, které mám třeba pod proměnnou $x[1].

Vařím z vody, fakt nemám tušení.
Spectator
Profil
Můžeš to dělat na straně klienta v javascriptu - fce eval() a nebo v PHP fce =) eval()

v php do ní totiž můžeš napcat kód php ve formě stringu. Takže když uděláš echo
 eval("echo 1+2*3+sin(10);");
dozvíš se, že se to rovná 6.45597888911
Alphard
Profil
WMPopi:
Pole $zaznam je zřejmě v ideální tvaru pro různé replace funkce, takže můžete do daného výrazu dosadit hodnoty a pak použít eval(). Pokud ještě předtím zkontrolujete výsledný výraz (jestli nepoužíváte funkce jako sin(), bude to jednoduché regulár), mohlo by to být i bezpečné. Což nic nemění na tom, že eval() osobně nemám rád :-)

Druhá možnost je rozbrat ten výraz na elementární části, uložit do stromu a potom spočítat. Typická úloha výrobte kalkulačku, určitě by šlo najít něco hotového.
WMPopi
Profil
eval, to je přesně ono co jsem hledal.
Funkci jsem dosud neznal, děkuji 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: