PHP查询/运算符比较方法

时间:2014-04-28 15:59:53

标签: php comparison operators

我的PHP页面在每个负载上都有一系列变量;它们的值决定了哪些小部件显示。每个小部件都设置了应该显示的时间标准。

实施例。显示小部件'A',其中:

  

“page == 1,page!= 3,user> 9,rank!= blue”

$myVars = array();
$myVars['page'] = 1;
$myVars['user'] = 99;
$myVars['rank'] = 'red';

在这种情况下,我编写了一个简单的方法 - 它分隔查询并对每个条件进行比较,并在遇到FALSE时立即停止。问题是我的引擎没有支持“OR”运算符。必须满足每个标准。我无法理解如何将操作符添加到其中。

  

“page == 1 || page == 2&& page!= 3&& user> 9 || user == 3&& rank!= blue”

这样可以更灵活地显示窗口小部件何时显示,而不会为不同的场景制作大量重复的窗口小部件。我看到SQL必须如何运行查询以及我如何查询变量之间存在一个平行关系 - 是否有一个我可以使用的预先编写的引擎,或者我的命运是编写一个完整的引擎来计算出一个小部件是否符合标准?

提前谢谢,克雷格。

2 个答案:

答案 0 :(得分:0)

扩展您的语言以支持Conjunctive Normal FormDisjunctive Normal Form

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在这里似乎更自然。

答案 1 :(得分:0)

另一个合理的解决方案(比eval更安全)可能是使用parse_str的某种组合将动态变量转换为可比较的变量 - 但是我不确定如何在没有eval的情况下仍然生成动态if语句。