Autor Zpráva
vrata_ansorge
Profil
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 *
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;
  }

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