有一组用于计算某些值的简单公式。 我需要为Web界面实现这一点(我在PHP中实现)。
要存储公式,我使用的格式如下:“X1 + X2 + X3”。当我需要进行计算时,我在循环中调用函数preg_replace,用实际数据替换X1,X2 ..(由用户输入或先前保存 - 这并不重要) 然后我使用函数eval('$ calculation_result ='。$ trans_formula。';')其中$ trans_formula存储公式的文本和替换数据。
这种机制看起来像一个原始人,我有一种感觉,我正试图重新发明轮子。也许有一些现成的算法,技术,方法来实现这一目标?没有必要的PHP代码。我甚至会欣赏简单的算法描述。
答案 0 :(得分:3)
首先想到的是: eval很糟糕!
我将如何解决这个问题:
我将把formalue存储在postfix中(波兰表示法)
然后我会写一个简单的程序来评估表达式。编写后缀评估器相当容易。
如果需要,此方法还允许您检查值数据类型和范围约束等内容。还消除了 eval 的巨大风险。
干杯!
编辑回复您对该问题的评论:
如果您的用户将输入他们自己的表达式,您也希望将它们转换为postfix。 Check out infix to postfix conversion
答案 1 :(得分:2)
查看PHPClasses上的evalMath课程。
答案 2 :(得分:0)
如果公式是预先确定的,正如我想读你的问题那样,它是无用的(更好的,它是危险的)使用eval来评估它们。
创建简单函数并调用它们传递适当的参数(在输入检查之后)。
例如,您的示例将是:
<?php
function sumOfThree($x1, $x2, $x3) {
return $x1+$x2+$x3;
}
// and you can call it as usual:
$calculation_result = sumOfThree($first, $second, $third);
?>
你会得到很多好处