在 php 中处理数学方程

2023-12-25

用户可以输入他们喜欢的任何数学方程(带有一个变量):

x + 5

1 - x/2

(x/3) * (56/13)

它们以字符串形式存储在数据库中。当检索它们时,我需要用“x”代替数字并检查方程的值。

我怎么能这样做呢?

我正在考虑编写一个解析器来解构字符串并将它们转换为方程,但这听起来很昂贵并且存在问题。另一种选择是通过 eval 传递它们(但如果可以的话,我不太喜欢使用 eval)。

有任何想法吗?

更新: 我还需要能够获得诸如“(x > 5)”之类的布尔值。这对于 evalMath 来说是不可能的

更新2: 我需要开火lots等一下。我一直在研究 php 中的 eval 但无法让它返回 (5 > 4) 的布尔值,但是我注意到 js 可以做到这一点...也许我应该调查 node.js...

更新3: 在尝试了一些有趣的 Node.js(并让它工作)之后,我返回并让 eval 在 PHP 中工作,请参阅:php eval 可以返回布尔值吗? https://stackoverflow.com/questions/4028043/can-php-eval-return-a-boolean-value

因此,我将使用 eval 对用户输入进行非常非常硬核的过滤。


每当这个问题出现时,我的标准答案是:

不要使用 eval (特别是当您声明这是用户输入时)或通过编写自己的公式解析器重新发明轮子。

看看evalMath http://www.phpclasses.org/package/2695-PHP-Safely-evaluate-mathematical-expressions.htmlPHPClasses 上的类。它应该可以完成您在此处列出的所有操作。

EDIT

回复:不幸的是 evalMath 不能处理 (x > 5) 之类的事情

将第 177-179 行更改为

$ops   = array('+', '-', '*', '/', '^', '_', '>', '<', '=');
$ops_r = array('+'=>0,'-'=>0,'*'=>0,'/'=>0,'^'=>0, '>' => 0, '<' => 0, '=' => 0); // right-associative operator?
$ops_p = array('+'=>0,'-'=>0,'*'=>1,'/'=>1,'_'=>1,'^'=>2, '>' => 0, '<' => 0, '=' => 0); // operator precedence

将第 184 行更改为

if (preg_match("/[^\w\s+*^\/()\.,-<>=]/", $expr, $matches)) { // make sure the characters are all good

add

case '>':
     $stack->push($op1 > $op2); break;
case '<':
     $stack->push($op1 < $op2); break;
case '=':
     $stack->push($op1 == $op2); break;

第321行之后

evalMath 现在将处理 (x > 5)、(x

// instantiate a new EvalMath
$m = new EvalMath;
$m->suppress_errors = true;
// set the value of x
$m->evaluate('x = 3');
var_dump($m->evaluate('y = (x > 5)'));

进一步编辑

缺少第 307 行,应修改为:

if (in_array($token, array('+', '-', '*', '/', '^', '>', '<', '='))) {
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 php 中处理数学方程 的相关文章

  • MySQL LAST_INSERT_ID() 和 FOUND_ROWS()

    当 PHP 脚本每秒有数百个查询时会发生什么 它会影响这些函数吗 是否保证它们会返回当前脚本中最后一个插入语句中最后插入的 id 它会返回当前脚本中最后一次选择的行数吗 如果同时从另一个脚本进行新的插入或选择 在 FOUND ROWS 的情
  • 在同一服务器上的 2 个子域中安装 2 个 WordPress 时共享用户

    我有 2 个 WordPress 网站 位于 2 个不同的子域中 例如test1 abc com and test2 abc com 这两个网站都激活了 wp require 插件 只有登录用户才能看到该网站 我们想要创建一个系统 如果用户
  • snappy wkhtmltopdf 包装器将生成的 html 文件发送到浏览器

    我像鼹鼠一样用谷歌搜索 但找不到正确的方法 我正在使用 WKHTMLTOPDF Wrapper Snappy 创建 PDF 如何将使用generateFromHtml方法生成的pdf直接发送到浏览器 这就是我想做的 header Conte
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • WAMP PHP 启动错误:无法加载动态库

    我的 WAMP 服务器昨天工作得非常好 今天我不得不重新启动计算机 但有些事情搞砸了 服务器从未完全启动 任务栏图标保持橙色 我的项目将打开 但仅加载 HTML 而不加载 PHP 这是我的 PHP 错误日志 04 Oct 2014 01 3
  • 计算帖子中使用 WordPress 短代码的次数

    我有以下 WordPress 短代码功能 function wp shortcode static i 1 return i i return return add shortcode shortcode wp shortcode 这很好用
  • Symfony2 实体字段在选项为空时显示所有条目

    我的 Symfony2 项目中有一个实体类型表单字段 builder this gt createFormBuilder projects this gt getProjects builder gt add project entity
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • Php Curl HTTP POST REQUEST 使用嵌套键值对设置自定义标头

    如何使用 Curl 在 php 中设置此标头 CustomInfo 元素是数组 嵌套键值对 AuthenticationInfo 元素是数组 嵌套键值对
  • Symfony 4 生产模式错误处理页面内存耗尽

    我将我的项目设置为prod模式在 env除了自定义错误页面之外的所有内容似乎都有效 我将此作为我的 404 树枝模板 templates bundles TwigBundle Exception error404 html twig inc
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 即使在双引号内或使用 PHP_EOL,PHP echo 也不打印换行符

    这是一张照片剪辑 我认为它很清楚 这真让我抓狂 我似乎无法让 php 在我的本地主机 使用 xampp 或在线 PHP 解释器上打印换行符 如果你想在 php 中使用 HTML 标签 试试这个 echo dkljaks aalksja kl
  • 多维数组 PHP 内爆 [重复]

    这个问题在这里已经有答案了 就我的数据结构而言 我有一个 communications 数组 每个 communications id 本身包含三部分信息 id score 和 content 我想内爆这个数组以获得逗号分隔的 id 列表
  • 从 URL 任何文件类型创建图像

    我知道imagecreatefromgif https www php net manual en function imagecreatefromgif php imagecreatefromjpeg https www php net
  • Laravel 5 命名约定

    我对 Laravel 约定有点困惑 因为我是这个框架的新手 我正在关注 Jeffrey Way 他使用的 Laracasts 视频Plural对于控制器名称 E g 页面控制器 卡片控制器 帖子控制器 但如果我参考官方文档Laravel g
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • MySQL如何从多个表中获取数据

    我正在寻找 php MySQL jquery 的帮助 我有2张桌子 table1表 1 有 4 列 id 标题 desc thumb img tabel2表 2 有 3 列 id 表 id img 我只想将 2 个表与 get QS 的值进
  • 致命错误 - 未找到“Mongo”类

    我正在尝试执行此操作 但我收到以下错误 致命错误 在 C wamp www 中找不到类 Mongo Info PHP 5 38 MongoDB mongodb win32 i386 2 0 2 MongoDB PHP 驱动程序 mongo

随机推荐

  • CGAL:带有信息的点的凸包

    我在平面上有一个由 2D 点 N 个元素 组成的向量 我想制作这些点的凸包 之后 我想检索凸包中每个顶点的向量索引 我该怎么做 我知道 通过利用三角测量存在这种可能性vector
  • Linux串口的正确初始化顺序

    我编写了一个必须在 Linux 上使用串行端口的应用程序 尤其是 ttyUSB 端口 读取和写入操作是使用标准的 select read 循环和 write 执行的 它们可能没有任何问题 但初始化代码 或缺少某些部分 会损坏 tty 子系统
  • addEventListener 到除一个元素之外的所有元素

    我正在尝试让自己摆脱 jQuery 我的心在正确的地方 不是吗 并且我很难找到相当于 not 选择器 I have document body addEventListener mousewheel scrollTriggered 我想在除
  • 如何强制 Knit 在所有其他代码块之后评估 \Sexpr

    我正在尝试为动态文档编写摘要 但是我的 Sexpr 通话无法正常工作 本质上我想做的就是以一个摘要开始文档 该摘要具有从生成的 p 值 Sexpr value 其中值是在文档的 下游 确定的 例如 这有效 begin document lt
  • 向 Microsoft Sharepoint API 发出卷曲请求?

    有没有一种简单的方法来使用cURL http curl haxx se docs httpscripting html请求 REST API 访问我的 Sharepoint 帐户上的文件 例如 curl i H Authorization
  • 如何使用可点击对象消除可跨度字符串中的下划线?

    我有一个Spannable Object with a Clickable Object设置为它 当 的时候Spannable String显示在TextView它有蓝色文本和蓝色下划线 向用户表明该文本是可点击的 我的问题是如何防止出现蓝
  • 如果 MS Chart Control 没有数据,我可以显示消息吗?

    如果没有要绘制图表的数据 是否有办法在 MS 图表控件上显示 默认 消息 我有一个图表 其中包含一些控件 允许用户选择各种日期范围 如果在该日期范围内没有要绘制图表的数据 则当前仅显示任何内容 或者至少显示图例和背景 仅此而已 我希望有一条
  • tsc 似乎没有从 tsconfig.json 中选择“排除”选项

    我正在努力让 tsc 获取我的 tsconfig json 文件并编译我的 ts 文件 它遇到了重复错误 我试图通过 tsconfig json 来避免这些错误 I have package json tsconfig json typin
  • minSdk 小于 21 时 Locale.forLanguageTag 的等效项?

    我想使用Locale method forLanguageTag 然而 使用它所需的设备minSdk是21 由于我希望我的应用程序与尽可能多的设备兼容 因此我需要较低 minSdk 的等效项 有人熟悉这种替代方案吗 添加 Apache Co
  • 用Matlab实现图像直方图

    我正在尝试在Matlab中实现 我知道有一个自定义函数可以实现它 灰度图像直方图 到目前为止我已经尝试过 function h histogram matlab imageSource openImage rgb2gray imread i
  • 如何指定R CMD执行目录?

    以前我可以通过以下方式从命令行启动 Rserve R CMD Rserve 在 Ubuntu 上升级到 3 0 2 后 我得到 usr lib R bin Rcmd 62 exec Rserve not found 我尝试过重新安装并手动启
  • 项目 Euler 7 Scala 问题

    我试图使用 scala 2 8 解决 Project Euler 问题 7 我实施的第一个解决方案大约需要 8 秒 def problem 7 Int var num 17 var primes new ArrayBuffer Int pr
  • 使用 Spring Boot、Spring Security 和 React 时发生 CORS 错误

    早上好 这两天我一直在解决这个问题 所以我决定发布一个关于它的问题 基本上我有一个 Spring Boot 项目 它通过 React JS 前端执行基本的 CRUD 操作 一切似乎都工作正常 直到我将 Spring Security 添加到
  • 使用 .NET 进行双向通信以进行通知的方法

    我有一个服务器 客户端项目 我使用 C 进行编码 WCF 作为服务器 我仅限于 HTTP 到目前为止对 wsdualhttpbinding 还没有运气 项目正在公司网络上运行 除了 WCF 双工之外 还有其他方法可以将通知从服务器发送到客户
  • 如何在推送时自动结帐?

    考虑以下情况 我有一个 git 存储库 foo git 其中包含 javascript 项目的代码 在这个存储库中有一个分支生产包含由网络服务器提供的代码状态 该服务器从以下位置获取代码 var www foo 该存储库是该项目的主存储库
  • 对于作为 Azure 应用服务 (P3) 托管的 .NET Core 2 Web api 的基准 RPS,我的期望应该是什么?

    我正在尝试衡量在 NET Core 2 中开发的 Web API 的基线 RPS 以下是迄今为止我遵循的步骤 从 Microsoft 的 VS 模板中生成了一个新的 空的 Web API 项目 添加了一个新的控制器 它执行基本的 你好 你的
  • Automake 将两个静态库合并为一个

    我正在尝试将预构建静态库中的符号包含到我正在构建的静态库中 然后 我正在构建的静态库将在可执行文件内部使用 我遇到的问题是我的静态库中从其他静态库获取了未定义的符号 这意味着我从预构建的静态库中需要的符号没有包含在我的静态库中 使用自动工具
  • 在 LWUIT 中拨打电话

    我有一个带有电话号码的文本字段 我想要做的就是当文本字段聚焦并按下呼叫按钮时 必须暂停应用程序并且应使用以下命令拨打文本字段的电话号码平台请求 http docs oracle com javame config cldc ref impl
  • MKOverlayView 和触摸

    我的地图上有一个自定义 MKOverlayView 我想检测触摸 但是 我似乎无法让覆盖层做出响应 我希望这会是愚蠢的事情 比如忘记将 userInteractionEnabled 设置为 YES 但是可惜 没有运气 目前 我的情况如下 m
  • 在 php 中处理数学方程

    用户可以输入他们喜欢的任何数学方程 带有一个变量 x 5 1 x 2 x 3 56 13 它们以字符串形式存储在数据库中 当检索它们时 我需要用 x 代替数字并检查方程的值 我怎么能这样做呢 我正在考虑编写一个解析器来解构字符串并将它们转换