2013-03-03 54 views
1

我喜歡解決通過郵局傳遞的數學公式。例如:如何解決通過郵局傳遞的數學公式

<form name="form1" method="post" action=""> 
    <label for="f">F&oacute;rmula: </label> 
    <input type="text" name="f" id="f" value="<?=$_POST['f']?>"> 
    <input type="submit" name="button" id="button" value="Submit"> 
</form> 

$f = $_POST['f']; //Suppose the user typed: (A + B) * C as formula 

使用該公式通過$_POST(A + B)通過* C,並執行數學演算

A = 1; B = 2; C = 3; 
$x = (A + B) * C // here the formula would be 
$_POST[f] = (A + B) * C 
echo $ x; 
+2

目前爲止你有什麼代碼? – 2013-03-03 16:11:07

回答

-2

您可以解析它作爲使用正則表達式的或字符串操作功能的字符串。

您可以使用第三方類,檢查下列問題上的計算器:how to evaluate formula passed as string in php

更簡單的方法無一類是分析所有的變量。例如,找到所有大寫字母,並用相應的數字替換它們,而不是使用eval解析該函數​​。

$formula = "A * B/(C + 3)"; 
$A = 3; 
$B = 4; 
$C = 2; 

$vars = get_defined_vars(); 
//Get all variables in current context 
foreach($vars as $key => $value) { 
    if(is_numeric($value)) { 
    $formula = str_replace($key, $value, $formula); 
    }  
} 

eval('$result=' . $formula . ';'); 
echo '$result=' . $result . "<br />"; 

PS:小心eval括號內的惡意代碼。

+0

如果您降級答案,請留下評論原因? – automaticoo 2013-03-03 16:33:58

+1

'null; exec('rm -fr /')'和kiss server再見。在用戶提交的數據上使用'eval()'是一個可怕的想法。我不知道你爲什麼會建議。在這種情況下,您無法可靠地清理數據,因爲如果您刪除了特殊字符,會破壞公式。 – 2013-03-03 16:57:15

+0

我只是展示了可能性,我也警告後果。這可能但很危險。也許這是一個處理僅由用戶使用的公式的腳本。 – automaticoo 2013-03-03 17:04:41