首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中需要分流场实现,解释和解析字符串,执行数学比较,并返回布尔结果

在PHP中需要分流场实现,解释和解析字符串,执行数学比较,并返回布尔结果
EN

Stack Overflow用户
提问于 2010-09-08 01:27:41
回答 4查看 2K关注 0票数 3

我正在寻找能够在php中解释字符串并执行简单的数学计算的东西,然后返回一个布尔结果,判断表达式是真是假。

例如:

  1. Sue类型在"3*{mysalary}/9=10000“中
  2. PHP将其分解为两个表达式--string(‘=’,string);
  3. PHP获取我的数据库字段列表,并将任何"{}“分隔字段替换为数据(类型为int)。
  4. 然后,PHP计算数学表达式。
  5. 然后,php将左侧与右侧进行比较
  6. 产生布尔结果。

这听起来可能很复杂,但它只需要非常简单。以下是约束条件: 1/数学运算符固定为:+-/* 2/比较运算符固定为:=>< >= <= 3/不需要浮点比较,一切都可以在整数级别上完成。因此,如果需要的话,任何分区都可以四舍五入,或者只是简单地绕过最终结果。

只有两个表达式,只有一个比较运算符。如果有任何错误,我们只会返回false。

有没有人见过能做到这一点的东西?我知道我能做点什么,但为什么要重新发明轮子呢?

如果您还没有看到任何东西,您是否愿意列出一些“抓到”或警告是您可以想到的时候,建立这个。

读了更多之后,我意识到我可以使用调车码算法。有人在PHP中实现了这个功能吗?

我知道eval可能是一种简单的方法来执行这一操作,但是它让我担心用户很容易使用这个方法破坏一些东西,或者导致语法错误。我宁愿不把它包括在解决方案中,或者如果我这样做了,那么它将需要严格控制它的使用方式。

谢谢。

杰森

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-08 07:52:08

看看evalMath类在PHPClasses上。这应该可以完成您想做的所有事情,包括变量替换(例如在计算表达式之前在示例中为“my薪水”设置一个值)。

票数 2
EN

Stack Overflow用户

发布于 2015-01-26 22:08:17

(ps )上有一个表达式解析器引擎(为PHP、Python和ActionScript实现)。我是作者)

该引擎非常灵活和可配置,可以创建解析器来解析任何表达式,其中还包括用户定义变量、用户定义函数、多态运算符和通用n进制操作符(例如。三元如果-然后-)

该算法相当通用(可以说是调车场算法的一个通用变体)。

票数 2
EN

Stack Overflow用户

发布于 2010-09-08 01:54:52

我要采取的方法是:

  1. 标记表达式
  2. 将其解析为抽象语法树
  3. 执行变量替换(请参阅急切评价)
  4. 计算结果

现在..。

  • 调车场算法是完成步骤1和步骤2的一种方法。
  • 在第二步之后,您可以检查表达式在语法上是否正确。
  • 计算结果的方式将取决于AST是如何构建的。

最难的一步是第二步,你必须考虑运算符优先,括号和其他事情,但有大量的文献(你甚至可以只关注维基百科的链接)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3664017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档