php - 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 库可以在某处使用?
解决方案
假设只有一个三元,您可以将字符串分解为三元表达式的单独部分并分别评估这些部分。
$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);
}
如果有不止一个三元组,如果你比我更擅长正则表达式,你可能仍然可以做到。:)
我承认这种方法有点幼稚,我可以想到各种很容易破坏它的东西,例如括号中的三元子表达式,但它可以适用于像你的问题中的简单示例。
推荐阅读
- laravel - 块方法不适用于刀片 Laravel
- c++ - SWIFT Hashable 结构的等效 C++ 结构
- python - sorted() 乘以 -1 不适用于 python 中的字符串数据
- python - 如何在 AWS Sagemaker 中检索分段掩码中使用的标签
- python - 将 docker 容器配置为另一个容器中的环境变量
- amazon-web-services - 本地工作找不到区域
- c# - 为天蓝色功能设置不同的计时器属性
- json - 使用python迭代json对象以从每个对象中获取特定值
- asp.net-core - HttpContext.TraceIdentifier 总是相同的(和一个 Guid)
- swift - 如何用 Swift 中 MKMapView 中下一个视图控制器的新值替换旧值?