user68621 user68621 - 8 months ago 50
PHP Question

calculate math expression from a string using eval

I want to calculate math expression from a string. I have read that the solution to this is to use eval(). But when I try to run the following code:


$ma ="2+10";
$p = eval($ma);
print $p;


It gives me the following error:

Parse error: syntax error, unexpected $end in
: eval()'d code on line 1

Does someone know the solution to this problem.


While I don't suggest using eval for this (it is not the solution), the problem is that eval expects complete lines of code, not just fragments.

$ma ="2+10";
$p = eval('return '.$ma.';');
print $p;

Should do what you want.

A better solution would be to write a tokenizer/parser for your math expression. Here's a very simple regex-based one to give you an example:

$ma = "2+10";

if(preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE){
    $operator = $matches[2];

        case '+':
            $p = $matches[1] + $matches[3];
        case '-':
            $p = $matches[1] - $matches[3];
        case '*':
            $p = $matches[1] * $matches[3];
        case '/':
            $p = $matches[1] / $matches[3];

    echo $p;