PHP-解决包含三元运算符而不包含eval()的方程式?

时间:2018-08-24 19:54:16

标签: php eval equations

我目前正在开发一个PHP应用程序,该应用程序需要求解可能具有或不具有三元运算符的方程式。

例如,替换方程式中的变量后,我们将剩下以下字符串:

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

我们以前使用过eval()(显然可以使用),但是由于eval()的安全性问题,因此从PHP类(https://www.phpclasses.org/package/2055-PHP-Solve-equations-with-multiple-variables.html)移至EOS软件包。

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

1 个答案:

答案 0 :(得分:1)

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

$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);
}

如果三元以上,那么如果您比我更擅长正则表达式,那么您可能仍然可以做到。 :)

我承认这种方法有点天真,我可以想到各种很容易破坏它的东西,例如一种带括号的三元子表达式,但是它可以用于简单的示例,例如您的问题中的那个。