基本布尔逻辑——如何仅在另一个条件为真时测试条件

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:您应该将其添加到您的帖子中。我对缩短效果很好奇,因为我只看到了 !

以上是关于基本布尔逻辑——如何仅在另一个条件为真时测试条件的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 仅在条件为真时更新主字段

仅在条件为真时添加指令 [重复]

如何执行?当某些条件为真时,带有 OR 的 jquery.on 事件?

Kotlin:在条件为真时重复 n 次

Javascript:<script src=jquery...仅当条件为真时

Shell ❀ 条件测试语句