2013-09-16 80 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

謝謝,現在就工作。我知道,當你不正確地使用它時,評估是危險的。 –