2011-11-14 163 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 
}