首页 > 解决方案 > PHP - 求解包含没有 eval() 的三元运算符的方程?

问题描述

我目前正在开发一个 PHP 应用程序,该应用程序需要解决可能有也可能没有三元运算符的方程。

例如,在等式中替换我的变量后,我们得到以下字符串:

$eq = '(3.07 > 10 ? 1.93 * 10 : 3.07 * 1.93)';

我们以前使用 eval() (这显然可以工作),但从 PHP 类(https://www.phpclasses.org/package/2055-PHP-Solve-equations-with-multiple-variables 移至 EOS 包。 html ) 因为 eval() 的安全问题。

EOS 类不解释三元运算符,我不想回到 eval(),那么我在这里有什么选择?有没有更好的 PHP EOS 库可以在某处使用?

标签: phpevalequations

解决方案


假设只有一个三元,您可以将字符串分解为三元表达式的单独部分并分别评估这些部分。

$eq = '3.07 > 10 ? 1.93 * 10 : 3.07 * 1.93';

preg_match('/(.+)\?(.+):(.+)/', $eq, $parts);

if (isset($parts[3])) {
  $result = Parser::solve($parts[1]) ? Parser::solve($parts[2]) : Parser::solve($parts[3]);
} else {
  $result = Parser::solve($eq);
}

如果有不止一个三元组,如果你比我更擅长正则表达式,你可能仍然可以做到。:)

我承认这种方法有点幼稚,我可以想到各种很容易破坏它的东西,例如括号中的三元子表达式,但它可以适用于像你的问题中的简单示例。


推荐阅读