我有一个if条件if(abc==xyz AND (xyz==jkl OR abc==jkl))
。
如何使用能给我非括号条件的代码重写此表达式,例如
if(xyz==jkl OR abc==jkl AND abc==xyz)`
对于基本表达式,我们可以使用前缀表示法,基于运算符的优先级,在堆栈的帮助下我们可以解决它。但我只想重写条件,以便找到哪个输出与带括号的输出相同。
答案 0 :(得分:2)
您可以首先将条件转换为DNF,使用AND比OR高precedence的事实:
if (abc==xyz AND xyz==jkl OR abc==xyz AND abc==jkl)
查看第二部分,可以将其重写为
if (abc==xyz AND xyz==jkl OR abc==xyz AND xyz==jkl)
现在你可以看到两个部分是相同的,真的,即我们可以简化为
if (abc==xyz AND xyz==jkl)
有趣的事实:如果表达式无法简化,您还可以合并||
和AND
,并利用优先级规则:
if (abc==xyz AND xyz==jkl || abc==jkl)
不是我会推荐它。
答案 1 :(得分:0)
如果要求具体说明这个条件,如果abc,xyz,jkl彼此相等则为真
所以
if(abc == jkl AND abc == xyz)。
如果您正在寻找实验,请查看运算符优先级表http://php.net/manual/en/language.operators.precedence.php