[英]PHP Query/Comparison Method with Operators
我的PHP页面在每次加载时都有一系列变量; 它们的值确定要显示的窗口小部件。 每个窗口小部件都为何时显示设置了标准。
例。 显示小部件“ A”,其中:
“ page == 1,page!= 3,用户> 9,等级!= blue”
$myVars = array();
$myVars['page'] = 1;
$myVars['user'] = 99;
$myVars['rank'] = 'red';
在这种情况下,我编写了一个简单的方法-它对查询定界,并对每个条件进行比较,并在遇到FALSE时立即停止。 问题是我的引擎不支持“或”运算符。 必须满足所有标准。 而且我无法理解如何添加运算符。
“ page == 1 || page == 2 && page!= 3 &&用户> 9 || user == 3 &&等级!=蓝色”
这将使我在显示小部件的时间时更具灵活性,而无需为不同的场景制作大量重复的小部件。 我看到SQL必须如何运行查询与我想如何查询变量之间存在相似之处-是否可以使用预写引擎,或者如果小部件符合条件,我的命运是否可以编写一个完整的引擎来解决?
预先感谢,克雷格。
page==1 || page==2 && page!=3 && user>9 || user==3 && rank !=blue
看起来像(CNF):
(page==1 || page==2) && page!=3 && (user>9 || user==3) && rank !=blue
如果要简化解析,可以执行以下操作:
(page==1 || page==2) && (page!=3) && (user>9 || user==3) && (rank !=blue)
DNF看起来像:
(page==1 && page!=3 && user>9 && rank!=blue)
||
(page==2 && page!=3 && user>9 && rank!=blue)
||
(page==1 && page!=3 && user==3 && rank!=blue)
||
(page==2 && page!=3 && user==3 && rank!=blue)
CNF在这里似乎更自然。
另一个可行的解决方案(比eval更安全)可能是使用parse_str的某种组合将动态变量转换为可比较的变量-但是我不确定如何在没有eval的情况下仍然可以生成动态if语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.