2011-11-14 160 views
-1

如果促銷代碼是「MAG20」,產品代碼是「99」或產品代碼是「77」或產品代碼是「44」,則請執行某些操作。PHP如果有東西和東西那麼東西?

(促銷代碼是相同的,產品列表過於相同的,但它是大)

if ($promocode=="MAG20" && $productID=="44" && || $productID=="77") { 

// wahay! run function 

} else { 

// no coupon for you 

} 

我希望,如果促銷MAG20和代碼爲99或代碼是77會工作& & || - 還有更好的方法來做這件事,因爲支架將會很大,30多種產品。

回答

3

你應該數組超出所有人的名字

$productIDs = array(10, 20, 30); 

的則IF函數將

if($promocode== "MAG20" && in_array($productID, $productIDs)) 

所以你的ID的1名列表和一個短if語句

+0

'新陣列()'真的嗎? – PeeHaa

+1

我認爲這個例子很清楚,但我已經更新了它。 – Niels

+0

我認爲這最好考慮速度和缺乏MySQL支持。 – TheBlackBenzKid

-1

不知道爲什麼認爲連續&& ||應該工作。這應該是什麼意思?

不管怎樣,你要的是:

$promocode=="MAG20" && ($productID=="44" || $productID=="77") 

你要組$productID=="44" || $productID=="77",否則,作爲並具有更高的優先級,這將作爲

($promocode=="MAG20" && $productID=="44") || $productID=="77" 

如果評估你必須測試很多ID,我建議使用某種查找表:

$productIDs = array('44', '77', ...); 
$productIDs = array_flip($productIDs); 

if($promocode=="MAG20" && isset($productIDs[$productID])) { 

} 
+0

請解釋downvote,否則我無法改進我的答案。謝謝! –

+0

可能是因爲in_array()的過度版本? –

+0

@ Col.Shrapnel:取決於,我更喜歡'O(1)'訪問,而不是線性搜索...授予,如果您只需在腳本中執行一次操作,那麼您將無法獲得任何內容。 –

0

使用此:

if ($promocode=="MAG20" and ($productID=="44" or $productID=="77")) 
    // wahay! run function 
} else { 
    // no coupon for you 
} 
+1

Ew,'和'和'或'。 – BoltClock

+1

它有什麼問題?爲什麼僅僅是一句話就有那麼多的恐懼? –

+0

@BoltClock有什麼不對嗎?或者你只是喜歡舊時尚&& || ?看看這個:http://php.net/manual/en/language.operators.logical.php – SERPRO

0

我這樣做:

if ($promocode=="MAG20" && ($productID=="44" || $productID=="77")) 
3

如果你有太多的產品,那麼最好有一個與產品和相應的優惠券代碼的SQL表。這將是一個更好,更乾淨的方式。在單個條件語句中擁有30個條件不僅會減慢您的應用程序速度,還會非常難以管理。

因此,您可以擁有優惠券表,產品表和coupons_to_products表,並查看最終表以瞭解優惠券是否真的有效。

+0

我很欣賞你的迴應,我同意 - 但沒有mysql訪問 – TheBlackBenzKid

1

使用如果有效產品ID將發生變化,或者它們很多,則排列陣列

$validProductIDs = array(44, 77, 104, 204); //Up to you how you populate this array 
if ($promocode == "MAG20" && in_array($productID, $validProductIDs)) { 
    // wahay! run function 
} else { 
    // no coupon for you 
}