Web的公式计算机制

时间:2010-09-10 15:19:52

标签: php math

有一组用于计算某些值的简单公式。 我需要为Web界面实现这一点(我在PHP中实现)。

要存储公式,我使用的格式如下:“X1 + X2 + X3”。当我需要进行计算时,我在循环中调用函数preg_replace,用实际数据替换X1,X2 ..(由用户输入或先前保存 - 这并不重要) 然后我使用函数eval('$ calculation_result ='。$ trans_formula。';')其中$ trans_formula存储公式的文本和替换数据。

这种机制看起来像一个原始人,我有一种感觉,我正试图重新发明轮子。也许有一些现成的算法,技术,方法来实现这一目标?没有必要的PHP代码。我甚至会欣赏简单的算法描述。

3 个答案:

答案 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);
?>

你会得到很多好处
  • 速度:eval执行速度很慢(即使是简单的功能);
  • 调试:你可以调试你的功能(并获得正确的错误信息);
  • 安全:Eval很容易被利用。