Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中解析字符串值_Php_Parsing - Fatal编程技术网

在PHP中解析字符串值

在PHP中解析字符串值,php,parsing,Php,Parsing,我有两张桌子。一个是规则集,另一个是逻辑。假设我的规则集表包含一行[(R1和R2)或R3],逻辑表包含每个规则的逻辑。比如: R1 | x > 4 R2 | y < 9 R3 | z < 5 R1 | x>4 R2 | y

我有两张桌子。一个是规则集,另一个是逻辑。假设我的规则集表包含一行
[(R1和R2)或R3]
,逻辑表包含每个规则的逻辑。比如:

R1 | x > 4  
R2 | y < 9
R3 | z < 5
R1 | x>4
R2 | y<9
R3 | z<5
我确实希望替换相关位置的逻辑值(例如
[((x>4)和(y<9))或(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