从变量执行运算符


execute operators from a variable

我正在尝试从变量/数组执行运算符。

我有一个这样的数组:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 6
                    [1] => +
                    [2] => 2
                    [3] => +
                    [4] => 4
                )
            [1] => Array
                (
                    [0] => 6
                    [1] => +
                    [2] => 2
                    [3] => -
                    [4] => 4
                )
            [2] => Array
                (
                    [0] => 6
                    [1] => +
                    [2] => 2
                    [3] => *
                    [4] => 4
                )

数组中的运算符和整数总数是动态的。我可以有 7 个整数和 6 个运算符。它始终采用格式[int + op + int + op +int ....]

我想使用eval().我知道 eval 是邪恶的,不建议使用,但我不在公共场合使用它。

我被代码的这种平静困住了:

function getResults($array) {
    $result = array();
    foreach($array as $key => $subarray) {
        $eval = '';
        $result[$key] = array();

        foreach($subarray as $subsubarray) {
            $exec = '';
            foreach($subsubarray as $data) {
                $exec .=  ' ' . $data;
            }
            ltrim($exec ,' ');
            $result = eval("?>$exec");
            echo $result;
        }
    }
}

当我执行这个时,我得到这个:

6 + 2 + 4
6 + 2 - 4
6 + 2 * 4
6 + 2 / 4
6 - 2 + 4
6 - 2 - 4
6 - 2 * 4
6 - 2 / 4
....

我希望得到这样的结果:

 8
 4
 14

我应该怎么做?

除了你调用eval()的方式之外,一切都很好:

$result = eval('return ' . $exec . ';');

确定我不需要指出未经净化的用户输入不应该接近该功能......