我有两张桌子。一个是RuleSet,另一个是Logic。假设我的RuleSet表包含一行[(R1 AND R2) OR R3]
,而Logic表包含每个规则的逻辑。就像是:
R1 | x > 4
R2 | y < 9
R3 | z < 5
我确实想在相关位置(如[((x > 4) AND (y < 9 )) OR (z < 5)]
)替换逻辑值来执行。我该如何实现?
我没有完全理解这个问题,但是您我想您正在尝试根据您从数据库中获取的字符串变量进行比较。
如果是这种情况:
<?php
$logic_rule = "(R1 AND R2) OR R3"; // SELECT * FROM `myrules` WHERE etc
$x=1;
$y=2;
$z=3;
/* fetch data and iratate with a foreach // SELECT * FROM `conditions` WHERE etc */
$logic_rule = str_replace("R1", "x > 4",$logic_rule);
$logic_rule = str_replace("R2", "y < 9",$logic_rule);
$logic_rule = str_replace("R3", "z < 5",$logic_rule);
/* $logic_rule is now: $logic_rule = "(x > 4 AND y < 9) OR z < 5"; */
/* replace variables (or place in array and foreach the array) */
$logic_rule = str_replace("x", $x,$logic_rule);
$logic_rule = str_replace("y", $y,$logic_rule);
$logic_rule = str_replace("z", $z,$logic_rule);
/* $logic_rule is now: $logic_rule = "(1 > 4 AND 2 < 9) OR 3 < 5"; */
/*Test the condition:*/
var_dump (eval ("return (".$logic_rule.");")); // true
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句