php - 如何在数学上评估像 "2-1"这样的字符串以产生 "1"?

标签 php math numbers operators eval

我只是想知道 PHP 是否有一个函数可以接受像 2-1 这样的字符串并产生它的算术结果?

或者我是否必须使用 explode() 手动执行此操作以获取算术运算符左侧和右侧的值?

最佳答案

我知道这个问题很老,但我昨晚在搜索不太相关的东西时遇到了这个问题,这里的每个答案都很糟糕。不仅糟糕,非常糟糕。我在这里给出的示例将来 self 在 2005 年创建的一个类,并且因为这个问题而在过去的几个小时内更新了 PHP5。确实存在其他系统,并且在发布此问题之前就已经存在,所以我很困惑为什么这里的每个答案都告诉您使用 eval , 当 PHP 的警告是:

The eval() language construct is very dangerous because it allows execution of arbitrary PHP code. Its use thus is discouraged. If you have carefully verified that there is no other option than to use this construct, pay special attention not to pass any user provided data into it without properly validating it beforehand.

在我进入示例之前,获取我将使用的类的位置是 PHPClassesGitHub . eos.class.phpstack.class.php 都是必需的,但可以合并到同一个文件中。

使用这样的类的原因是它包含和后缀(RPN)解析器的中缀,然后是 RPN 求解器。有了这些,您就不必使用 eval 函数并让您的系统面临漏洞。一旦你有了这些类,下面的代码就可以解决一个简单(更复杂)的方程,比如你的 2-1 例子。

require_once "eos.class.php";
$equation = "2-1";
$eq = new eqEOS();
$result = $eq->solveIF($equation);

就是这样!您可以对大多数方程使用这样的解析器,无论多么复杂和嵌套,都无需求助于“邪恶的 eval”。

因为我真的不希望这只是为了让我的类(class)参与其中,所以这里有一些其他选项。我只熟悉我自己的,因为我已经使用了 8 年。 ^^

Wolfram|Alpha API
Sage
A fairly bad parser
phpdicecalc

不太清楚我之前发现的其他人发生了什么 - 之前在 GitHub 上也遇到过另一个,不幸的是我没有为它添加书签,但它与包含解析器的大型 float 操作有关。

无论如何,我想确保在此处使用 PHP 求解方程的答案不会将所有 future 的搜索者指向 eval,因为它位于谷歌搜索的顶部。 ^^

关于php - 如何在数学上评估像 "2-1"这样的字符串以产生 "1"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057320/

相关文章:

java - math.round *1000/1000 没有意义是否有原因

PHP 检查数组中是否存在字符串不起作用

php - 在php中使用post更新记录时,页面会刷新

php - 使用公平槽策略从队列中获取下一个任务

c - 不使用 Enter [c] 输入数字

boost - 将 boost 随机数生成器与 OpenMP 结合使用

Java - 格式化数字以仅打印小数部分

javascript - OPTIONS 405(方法不允许)

php - codeigniter 3.1.0 中的 protect_identifiers 问题

java - 有没有一种根据简单规则集比较 3 个三元数的快速方法?