2011-07-25 12 views
2

私はこれが基本的なブール論理ですけど、私はこだわっている:基本ブール論理 - 他の条件が真である場合にのみ、条件をテストする方法

私はデータベースの結果をループしていて、それぞれに対して私が必要以下の条件を確認するために:

$old_value = $new_value; 

しかし、二次条件があります:上記がtrueの場合

if($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)) 

を行はdate型である場合、それはtrueを返します唯一の時間です。

答えて

5

てみてください。それを行う必要があります

if(($old_value != $new_value) && ($type != 'date' || !empty($new_value)) 

。理由を理解する助けが必要な場合はお知らせください。

+0

私は分かりません。具体的には、 '$ new_value'が空であるたびに、第2節のORがtrueを返すのではなく、型が' date'のときだけではないでしょうか? – Anthony

+0

はい、そうです。式全体は、old_valueがnew_valueと同じものではない場合と同じです。AND(日付について話していないか、日付について話していますが、$ new_valueは空です)。 – Patrick87

+0

ああ、 '$ type!= 'date' 'も真であるので、'!empty($ new_value) 'が真であるかどうかは関係ありませんので、条件が合格してアクションが発生します。この目隠しをするのに十分な時間を取るのにまだ時間がかかりますが、理にかなっています。ありがとう! – Anthony

2

if(($old_value != $new_value) && ($type != 'date' || ($type == 'date' && !empty($new_value))) 多分、これは短くすることができますが、私は考えられません。

+1

"$ type == 'date'"は冗長です。どうして? – Patrick87

+1

ああ、今私はそれが私が話していたものだったことを見ます。なぜなら、$ type == 'date''のときだけであるからです。しかし、これは条件の真っ直ぐな組み合わせをよりよく示しています。 – Nobody

+0

真。あなたの解決策は間違いありません。 De Morganをサブ式に適用することで、私はもっと短くなる可能性があります。 – Patrick87