2013-11-14 92 views
-1

我想用包含/不包含最終準則的條件構建if then聲明。PHP僅在條件匹配的情況下才包含條件

實施例:

$vanilla_on=true; 
$sugar_on=false; 
$flour_on=true; 

$vanilla=10; 
$sugar=2; 
$flour=100; 

// As I set $vanilla_on to false, it doesn't appear in my if statement, if it was set to true, it would be added && ($vanilla < 100) 
if (($sugar>2) && ($flour>90)) 
{ 
    // ok 
} 

基本上,我只想要查詢的香草,糖,麪粉和條件如果相應的布爾值被設置爲真。所以如果我有vanilla_on = false,那麼包括多少單位的香草就沒有關係,因爲我們只會檢查糖和麪粉的狀況。

+5

你究竟想要達到什麼目的? –

+0

你想做什麼?我在你的if語句中看不到'$ vanilla_on'。 – putvande

+0

你想要「實際」做什麼? –

回答

1
// these are "switches" that will tell the if statement which components to check 
$vanilla_on=true; 
$sugar_on=false; 
$flour_on=true; 

// components 
$vanilla=10; 
$sugar=2; 
$flour=100; 

// only check that the component meets the thresholds *if* it's "on" 
if (($sugar>2 || !$sugar_on) && ($flour>90 || !$flour_on) && ($vanilla < 100 || !$vanilla_on)) 
{ 
    // ok 
    echo "OKAY!"; 
} 

其工作原理是這樣的:你有一個if語句必須爲真東西是「好」。假設您需要檢查所有三個組件以確保它們都處於閾值範圍內,則所有3個條件都必須爲真,以使整個陳述的評估結果爲真。如果AND中的一個條件是錯誤的,則整個事件都是錯誤的。

但是讓我們假設你並不在意使用了多少香草。只要糖和麪粉在閾值內測量,您使用的香草多少無關緊要,以確定事情是否正常。爲此,可以將每個單獨的組件包裝在括號中,並將其與其對應的「on」布爾值進行或運算。簡而言之,如果$ vanilla_on爲false,意味着你不關心你使用的是多少香草味,那麼你將採用與你的閾值比較相反的布爾值,真值和OR值。由於(真或假)總是評估爲真,因此無論您使用多少香草,if語句的該部分總是返回true。同樣,如果$ sugar_on爲真,則相反的值爲假,因此爲了使if語句的這部分爲真,我們現在僅依靠糖閾值落入通過小於比較確定的範圍內。

總之,將問題分解成單個組件,然後將它們組合在一起。

+0

非常好的一個。應該想到它。謝謝 ! – user2991576

1
$vanilla_ok = true; 
if ($vanilla_on === true && $vanilla < 5) { 
    $vanilla_ok = false; 
} 

if (... && $vanilla_ok) 
{ 
    // ok 
} 
0

好的,我找到了一個簡單的方法來做到這一點。

if (a) 
{ 
if (b) {c=true} else {c=false} 
} 
else 
{ 
c=true 
} 

repeat for all _on variables 

if (c) && (d) ... 
相關問題