| Autor | Zpráva | ||
|---|---|---|---|
| vrata_ansorge Profil |
#1 · Zasláno: 5. 4. 2010, 18:50:06
Ahoj, nemáte někdo tip jak na spočítání výrazu v proměnné?
Dám příklad: mám input a do něho uživatel napíše jednoduchý výraz 2+4-5 a já bych potřeboval při zpracování formuláře tento výraz spočítat a uložit výslednou hodnotu. ale nemám vůbec páru jak do toho krom rozložení na čísla a operátory a nějaké složité počítání v cyklu. Nejde nějak jednoduše PHP říci, že se nejedná o řetězec, ale o výraz? Díky za tipy, případně odkazy, kde by takovýto problém byl již vyřešený. |
||
| DoubleThink Profil * |
#2 · Zasláno: 5. 4. 2010, 18:53:10
eval, nebo lépe a bezpečněji i s kontrolou tvaru pomocí preg_replace s přepínačem e.
|
||
| vrata_ansorge Profil |
super díky! díky odkazu na správné funkce jsem našel vzorové řešení, vkládám pro ostatní, kdyby někdo řešil podobný problém:
function matheval($equation)
// funkce spočítá výraz $equation (např. 2+3 vrátí 5
{
$equation = preg_replace("/[^0-9+\-.*\/()%]/","",$equation);
// fix percentage calcul when percentage value < 10
$equation = preg_replace("/([+-])([0-9]{1})(%)/","*(1\$1.0\$2)",$equation);
// calc percentage
$equation = preg_replace("/([+-])([0-9]+)(%)/","*(1\$1.\$2)",$equation);
// you could use str_replace on this next line
// if you really, really want to fine-tune this equation
$equation = preg_replace("/([0-9]+)(%)/",".\$1",$equation);
if ( $equation == "" )
{
$return = 0;
}
else
{
eval("\$return=" . $equation . ";" );
}
return $return;
} |
||
|
Časová prodleva: 16 let
|
|||
0