我有两张桌子。一个是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)]
)执行。
我怎样才能实现它?
答案 0 :(得分:3)
我没有完全明白这个问题,但我认为您正在尝试根据从数据库中提取的字符串变量进行比较。
如果是这种情况:
<?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