基本布尔逻辑——如何仅在另一个条件为真时测试条件
Posted
技术标签:
【中文标题】基本布尔逻辑——如何仅在另一个条件为真时测试条件【英文标题】:Basic Boolean Logic -- How to test for condition only if another condition is true 【发布时间】:2011-10-12 22:10:29 【问题描述】:我知道这是基本的布尔逻辑,但我卡住了:
我正在遍历数据库结果,并且对于每一个我需要检查以下条件:
if($old_value != $new_value)
如果以上为真,则动作为:
$old_value = $new_value;
但是还有一个次要条件。如果该行是“日期”类型,我还需要检查 $new_value
是否为空,但操作仍然相同。现在,我正在这样做:
if($old_value != $new_value)
if($type != date)
$old_value = $new_value;
elseif(!empty($new_value))
$old_value = $new_value;
我把上面说的过于简单化了,但实际上,单行动作实际上是几行,我知道我不需要根据次要条件重复。
但是我不知道将内部条件与外部条件结合起来的正确方法是什么。如果我这样做:
if(($old_value != $new_value) && ($type == 'date' && !empty($new_value))
那么它唯一会返回 true 的时间是该行的类型为 date。
【问题讨论】:
【参考方案1】:试试:
if(($old_value != $new_value) && ($type != 'date' || !empty($new_value))
应该这样做。如果您需要帮助了解原因,请告诉我。
【讨论】:
我不确定我是否理解。具体来说,不是每次$new_value
为空时,第二个子句中的 OR 都会返回 true,而不仅仅是当类型为 date
时?
是的,会的。当 old_value 与 new_value AND 不同时,整个表达式为真(我们不是在谈论日期,或者我们在谈论日期但 $new_value 为空)。
哦,我明白了,!empty($new_value)
是否为真无关紧要,因为$type != 'date'
也会为真,所以条件通过并且动作发生。我仍然需要一些时间才能做到足以蒙住眼睛,但它开始变得有意义了。谢谢!
@Anthony 蒙上眼罩,将 OR 视为 else 条件【参考方案2】:
if(($old_value != $new_value) && ($type != 'date' || ($type == 'date' && !empty($new_value)))
也许这个可以做得更短,但我想不出怎么做。
【讨论】:
"$type == 'date'" 是多余的;为什么? 啊,现在我明白了,这就是我所说的。因为 or 的第二部分仅在$type == 'date'
... 时执行,但是这更好地说明了条件的直接组合。
是的。您的解决方案当然是正确的;通过将 De Morgan 应用于子表达式,我的可能会更短。
@Thomas Carpenter:您应该将其添加到您的帖子中。我对缩短效果很好奇,因为我只看到了 !以上是关于基本布尔逻辑——如何仅在另一个条件为真时测试条件的主要内容,如果未能解决你的问题,请参考以下文章
如何执行?当某些条件为真时,带有 OR 的 jquery.on 事件?