我有一个网站,我需要让管理员按照自己的意愿创建方程式。这意味着他们可以创建如下的等式:
净利润=毛利润 - 税收
然后创建另一个方程式:
毛利润= x + y
税收= a - b
(其中x,y,a和b是常数)
所以它是一种递归方程。我不知道如何开始,所以一切都会有所帮助。
我正在使用PHP,问题是如何组织表以解决方程式中的这种依赖性。
答案 0 :(得分:1)
我创建了一个将变量x
与表达式y
相关联的数据结构。每个都有一个solved
标志。
然后,您可以拥有这些实体的数组,并循环遍历它们以查看每个实体是否可解。如果某些事情无法解决,那就没关系,只需继续下一个项目即可。每一遍都应该至少解决一个新问题,如果你在一个完整循环中没有解决任何新问题,你的表达式集就无法解决(因为某些东西没有定义,或者你有一个循环依赖)。
您提供的示例使用此方法可以轻松解决:四个常量和三个表达式将在几次迭代中解决(取决于您定义它们的顺序)。例如,以下子集将需要两次迭代来解决,因为常量是在表达式之后定义的:
[First iteration]
Gross-profit = x + y [unsolved]
x = 10 [solved]
y = 20 [solved]
[Second iteration]
Gross-profit = 10 + 20 [solved]
x = 10 [solved]
y = 20 [solved]
你需要一个表达式求值程序,它接受一个表达式(带有数学运算符和优先括号)和一组变量值对,并计算结果。如果表达式无效或未定义变量,则需要它抛出异常。你可以用PHP的eval()
实现这个目标,但这种方法通常被认为是不安全的。
执行此操作的代码几乎肯定已经以强大且经过测试的形式提供。不要试图自己编写 - 搜索库的公共存储库。