2012-01-30 23 views
3

我有一個if語句,我想控制與一個領域需要輸入,他們必須選擇其他2個選擇之一。PHP運營商如果陳述'和'和'或'

if(test1 && test || test3){ 
//Something here 
} 

我應該做這樣的:

if(test1 && (test2 || test3)){ 
//do stuff 
} 

我怎麼會去這樣做。我不能換我的頭周圍的邏輯...

+0

請仔細閱讀[運算符優先級(http://php.net/manual/en/ language.operators.precedence.php) – Phil 2012-01-30 23:18:59

回答

12
if ($requiredField && ($optional1 || $optional2)) { 
    /* Do something */ 
} 

/* Do something */位的代碼被執行,如果語句,以評估TRUE

這意味着,$requiredField必須是TRUE,因此必須是($optional1 || $optional2)

對於$requiredFieldTRUE,只需要在要填充 - 和第二部分:($optional1 || $optional2)要麼optional1optional2會做到這一點。

編輯:

重讀問題後,似乎我可能會誤解你了。如果用戶必須輸入一個特定的信息,並且必須選擇一個(不是兩個)在兩個選項 - 然後應該使用以下。

if ($requiredField && ($optional1^$optional2)) { 
    /* Do something */ 
} 

這意味着$optional1$optional2必須填寫 - 但不是他們兩個。

+2

好的命名。也許可以解釋爲什麼這是可行的,因爲OP不理解使用if語句的邏輯。 :) – cspray 2012-01-30 23:19:58

+0

謝謝@CharlesSprayberry ...完成! – cb1 2012-01-30 23:24:36

+0

謝謝,這有幫助! – 2012-01-31 00:21:37

2

從它的聲音,你希望後者:

if ($test1 && ($test2 || $test3)){ 
    //do stuff 
} 

把它看成兩個條件需要得到滿足。這給你這兩個條件。第二個條件恰好是另一個條件。然而,您發佈的第一個選項卻恰恰相反,因爲只要$test3爲真就可以執行

0

您可以使用單個if語句嵌套if語句,並帶有附加括號。

if(test1 && (test2 || test3)){ 
    //do stuff 
    } 
2

test1 && (test2 || test3)很容易從第一處瞭解到 - 選擇TEST1 & &(測試2 || TEST3)是指一個最後兩個。非常清楚。

test1 && test || test3 - 似乎並不正確:

test1 = false 
test2 = false 
test3 = true 

false && false || true = true 

實際上並不符合您的標準。

0

你的邏輯是正確的,但你的sintax沒有,你應該比較顯示的變量的值,或者簡單地忽略它們,因爲你試圖比較它們,因爲它們是TRUE。

$test1=true; 
$test2=true; 
$test3=false; 
if($test1==true && ($test2==true || $test3==true){ echo "YES";} 

這將輸出YES。

+0

我想你錯過了一點邏輯 – 2012-01-30 23:23:37

1

...他們必須選擇其他2個選擇

我只是拋出一個猜測在這裏之一。如果你真的想確保一個,但只有兩個其他選項被選中,那麼你需要xor

if ($required AND ($and_either XOR $or_other)) {