我有三个用户可以配置的规则:
1-无论是否有效,如果它处于活动状态,我必须在条件中使用它。
2-用户可以将规则行为设置为“&&”或'或'。
3-最后,用户可以设置规则的值。
例如,设置此规则;
规则1,主动:是,行为:或,值15。
规则2,活跃:是,行为:或者,值35。
规则3,主动:是,行为:或,值55。
我必须建立一个有条件的 这样:
if($varX < 15 or $varY < 35 or $varZ < 55)
{
.
.
.
}
我怎样才能完成这个?
答案 0 :(得分:1)
不要尝试动态地“构建”这样的语句并执行它(这将是脆弱的) - 而是单独找出表达式的结果,并通过和/或之后连接它们的值......
像这样的东西,(伪代码)
result = true;
if(rule_active) {
if(rule_behavior is or) {
result || (rule_var < rule_value);
}
else {
result && (rule_var < rule_value);
}
return result or do whatever with it …
(此处为and
和&&
交换了or
||
,因为使用这些更为常见;您当然可以保留and
和{{ 1}}如果你愿意,你只需要知道不同的运算符优先级。)
当然,如果您不是只想按顺序将一个规则的结果加入到下一个规则中,那么这可能仍然存在问题,同时还要考虑or
布尔逻辑中的优先级高于and
......但到目前为止,这不是你问题的一部分
如果您也想要考虑到这一点,那么您需要找出正确的“订单”,以便事先进行检查和加入。 (即便如此,结果可能不是用户想到的 - 所以也许你需要找到一种方法让用户引入“括号”进行分组以构建规则集......?真的取决于复杂性当前的实际任务。)