2013-09-16 50 views
0

我想从变量/数组中执行运算符。从一个变量执行运算符

我有一个数组这样的:

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 
       ) 

阵列内的总运营商和整数是动态的。我可以有6个操作员的7个整数。它总是在格式[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 

我该怎么做?

回答

2

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

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

我敢肯定,我并不需要指出的是,unsanitised用户输入不应该接近这个函数去任何地方..

+0

谢谢,现在就工作。我知道,当你不正确地使用它时,评估是危险的。 –