我目前正在开发一个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库吗?
答案 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);
}
如果三元以上,那么如果您比我更擅长正则表达式,那么您可能仍然可以做到。 :)
我承认这种方法有点天真,我可以想到各种很容易破坏它的东西,例如一种带括号的三元子表达式,但是它可以用于简单的示例,例如您的问题中的那个。