2011-03-17 133 views
1

我有這樣的字符串:$string = "a + b + c";。現在我想計算字符串爲總和。計算一個字符串的總和

例如:

$a = 10; 
$b = 10; 
$c = 10; 
$string = "a + b + c"; 

echo "Result is ".$string; 
output-> Result is 30 

$string = "a + b * c"; 

echo "Result is ".$string; 
output-> Result is 110 


預先感謝

回答

1

您的字符串中的變量缺少美元符號。我爲您編寫並測試了一個腳本,將這些符號添加到變量中,然後使用函數eval()將該字符串解析爲PHP代碼。

$a = 10; 
$b = 10; 
$c = 10; 
$string = "a + b + c"; 

$result = eval('return ' . preg_replace('/([a-zA-Z0-9])+/', '\$$1', $string) . ';'); 
echo $result;

這將輸出30

+0

您可以在eval語句中使用'return'。 – ThiefMaster 2011-03-17 10:09:36

+0

@ ThiefMaster:謝謝,我不知道。 – 2011-03-17 10:10:41

+0

@Michiel Pater可以使用'$ string =「a + b + c」;'然後在代碼'eval('return'。preg_replace('/([a-zA-Z0-9])+ /' '\ $$ 1',$ string));' – 2011-03-17 10:30:25

0

你可以這樣做:

$string = "$res = $a + $b + $c;"; 
eval($string) 
echo($res); 
3

我曾經做了一個calculator script

  • 它解析計算並將每個數字和運算符放在堆棧中,位於reverse polish notation
  • 它通過對堆棧上的所有操作執行操作來計算結果。
+0

這是我見過的不使用eval()的最佳解決方案。儘管可以使用更新,但少數示例無效。儘管對大多數方程式工作良好。 – jchavannes 2013-03-26 20:38:13

2

我的標準回答這個問題時,它作物起來:

不要使用eval(尤其是你指出這是用戶輸入),或者通過編寫自己的公式分析器重新發明輪子。

查看PHPClasses上的evalMath類。它應該在安全的沙箱中完成你所要求的一切。