2011-11-14 7 views
-1

Si le code de promotion est "MAG20" et que le code de produit est "99" ou si le code de produit est "77" ou si le code de produit est "44", faites quelque chose.PHP SI quelque chose ET quelque chose ALORS quelque chose?

(le code de promotion est le même et la liste des produits est le même aussi, mais il est grand)

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

// wahay! run function 

} else { 

// no coupon for you 

} 

J'espérais que si PROMO MAG20 ET CODE EST 99 OU CODE EST 77 fonctionnerait & & || - Y a-t-il aussi une meilleure façon de faire cela, car le support va être gros, plus de 30 produits.

Répondre

3

Vous devriez faire un tableau de tous vos noms

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

alors la fonction if

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

Vous avez donc 1 liste des numéros d'identification, et une courte instruction if

+0

'new Array()' vraiment? – PeeHaa

+1

Je pense que l'exemple est clair, mais je l'ai mis à jour. – Niels

+0

Je pense que cela est le meilleur compte tenu de la vitesse et du manque de support de MySQL. – TheBlackBenzKid

-1

Je ne sais pas pourquoi je pense que && || devrait fonctionner. Quel devrait être le sens de cela?

Quoi qu'il en soit, ce que vous voulez est:

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

Vous devez groupe $productID=="44" || $productID=="77", sinon, comme et a une priorité plus élevée, il serait évalué comme

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

Si vous devez tester beaucoup d'ID, je suggère d'utiliser une sorte de table de recherche:

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

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

} 
+0

S'il vous plaît expliquer la downvote, sinon je ne peux pas améliorer ma réponse. Je vous remercie! –

+0

peut-être à cause de la version trop sophistiquée de in_array()? –

+0

@ Col.Shrapnel: Dépend, je préfère l'accès 'O (1)' à la place de la recherche linéaire ... accordée, si vous n'avez à le faire qu'une seule fois dans le script, alors vous ne gagnez rien. –

0

Utilisez ceci:

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

Ew, 'and' et' ou'. – BoltClock

+1

qu'est-ce qui ne va pas? pourquoi tant de peur en un seul mot? –

+0

@BoltClock est quelque chose de mal avec ça? ou vous préférez simplement l'ancienne mode && || ? jetez un oeil à ceci: http://php.net/manual/en/language.operators.logical.php – SERPRO

0

je ferais ceci:

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

Si vous avez trop de produits, il vaut mieux avoir une table sql avec les produits et les codes promo correspondants. Ce serait une façon bien meilleure et plus propre de le faire. Avoir 30 conditions sur une seule déclaration conditionnelle ralentit non seulement votre application mais est également très très difficile à gérer.

Vous pouvez donc avoir une table de coupons et une table de produits et une table coupons_to_products et vérifier la table finale pour savoir si le coupon est vraiment valide.

+0

J'apprécie votre réponse et je suis d'accord - MAIS aucun accès mysql – TheBlackBenzKid

1

Utilisation tableau si les ID de produit valides vont changer ou s'ils sont nombreux

$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 
} 
Questions connexes