在PHP中解析字符串值

时间:2018-04-04 04:23:46

标签: php parsing

我有两张桌子。一个是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)])执行。 我怎样才能实现它?

1 个答案:

答案 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