Search code examples
phpmatheval

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:

<?php

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

?>

It gives me the following error:

Parse error: syntax error, unexpected $end in C:\xampp\htdocs\eclipseWorkspaceWebDev\MandatoryHandinSite\tester.php(4) : eval()'d code on line 1

Does someone know the solution to this problem.


Solution

  • 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];
    
        switch($operator){
            case '+':
                $p = $matches[1] + $matches[3];
                break;
            case '-':
                $p = $matches[1] - $matches[3];
                break;
            case '*':
                $p = $matches[1] * $matches[3];
                break;
            case '/':
                $p = $matches[1] / $matches[3];
                break;
        }
    
        echo $p;
    }