PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 28-11-2016 22:24:47

steph38
Membre
Inscription : 28-11-2016
Messages : 3

[résolu] je cherche a combiner deux tests avec une fonction AND

Bonjour,

Le code me sert a tester l'existance de produits à partir de leurs id dans Hikashop afin de modifier avec RegularLabs ReReplacer les liens des menus Joomla! si le produit n'est pas dans le panier.
En faite j'ai 4 étapes de commande qui peuvent s'étaler dans le temps. etape 1 maintenant et etape 2 dans 3 mois (émission de deux factures)
Par contre pour que le client puisse aller en étape 2 il faut qu'il ait un produit de l'étape 1 dans le panier. Il en vas de même pour l'étape 2, le client ne peut aller en étape 3 que s'il a un produit de l'étape 2 dans le panier (mais il faut que je sois sur qu'il ai toujours un produit de l'étape 1 dans son panier)
C'est là où je butte :

code test de l'étape 1 qui fonctionne bien :


$match_products = array(9,10,11);

$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart();
foreach($cart->products as $product){
  if(in_array($product->product_id, $match_products))
   {
      return true;
   }
return false;
}
 

Code test de l'étape 2 seule qui fonctionne bien :


$match_product1 = array(3,4,5,6,7,12);

$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart();
foreach($cart->products as $product){
  if(in_array($product->product_id, $match_product1))
   {
      return true;
   }
return false;
}
 

mais il faut que je "combine/imbrique" les deux tests qui doivent retourner un état comme suit étape 1=true ET étape 2=true pour que l'état global du code soit true, dans tous les autres cas l'état global est false.

J'ai donc pensé "combiner/imbriquer" cela comme suit :


$match_product2 = array(3,4,5,6,7,12);
$match_product1 = array(9,10,11)

$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart();
foreach($cart->products as $product){
  if (in_array($product->product_id, $match_product2))
   {
      if (in_array($product->product_id, $match_product1))
   }
return false;
}
 

et cela ne fonctionne pas... et là mes maigres connaissances en PHP ne m'aident pas... hmm

Si vous pouviez me donner une piste sur mon erreur (SVP soyez indulgents, expliquez moi mon erreur)

D'avance merci pour votre aide,
Cordialement,
Steph


Hors ligne

#2 28-11-2016 23:04:52

steph38
Membre
Inscription : 28-11-2016
Messages : 3

Re : [résolu] je cherche a combiner deux tests avec une fonction AND

j'ai revu ma copie et ai réécris le code comme suit :


$match_product2 = array(3,4,5,6,7,12);
$match_product1 = array(9,10,11)
$result = false;

$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart();
foreach($cart->products as $product) {
  if (in_array($product->product_id, $match_product1)) {
    foreach($cart->products as $product) { 
      if (in_array($product->product_id, $match_product2)) {
        $result = true;
        break 2;
      }
    }
  }
}
echo $result;
 

mais j'ai une erreur de syntaxe... et je ne sais pas où elle pourrait être...
Je ne suis pas sur que ma variable $result soit booléenne... or j'ai besoin d'un résultat true/false.

D'avance merci pour votre aide,
Cordialement,
Steph

Hors ligne

#3 29-11-2016 11:31:28

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 190
Site Web

Re : [résolu] je cherche a combiner deux tests avec une fonction AND

Bonjour,

Le foreach doublé n'est pas une bonne idée, cela va poser plus de problèmes qu'en résoudre.

Faisons "simple" :


$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart();
foreach ($cart->products as $product) {
    if (in_array($product->product_id, $match_product2) && in_array($product->product_id, $match_product1)) {
        return true;
    }
}
return false;
 

le && correspond au and (a peu près, le and étant aussi possible d'ailleurs.

Ceci dit, vu le contenu de $match_product2 et de $match_product1, ça ne sera jamais truc, puisque je ne vois pas comment l'id du produit pourrait être dans les deux vu qu'ils sont différents !

Est ce bien un and ? Faut t'il que l'id du produit soit dans les deux $match_.... ou faut t'il qu'il soit dans l'un ou l'autre ? (auquel cas il faudrait remplacer && par || (ou or)).


NB : le mot clé return est utilisé dans une fonction, ce code est il bien dans une fonction ?
@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#4 11-12-2016 16:03:51

steph38
Membre
Inscription : 28-11-2016
Messages : 3

Re : [résolu] je cherche a combiner deux tests avec une fonction AND

Merci ManicoW !

Je n'ai pas eu de mail me disant que vous avez posté une réponse... d'ou le retard de ma réponse.

La solution que j'ai retenue est la suivante :


$products_1 = array(3,4,5,6,7,12);
$products_2 = array(9,10,11);

$has_product_1 = false;
$has_product_2 = false;

$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart();

foreach($cart->products as $product) {
  if($has_product_1 && $has_product_2) {
    return true;
  }

  if ($has_product_1 || in_array($product->product_id, $products_1))
  {
    $has_product_1 = true;
    continue;
  }

  if ($has_product_2 || in_array($product->product_id, $products_2))
  {
    $has_product_2 = true;
    continue;
  }
}

return $has_product_1 && $has_product_2;
 

Encore merci pour votre aide !

J'ai un autre petit souci :

je cherche a ajouter un bout de texte devant

tax_namekey

dans le code suivant :

'NAME' => $tax->tax_namekey,

Mais lorsque j'entre ceci :

'NAME' => $tax->"Dont ".tax_namekey,

j'ai une erreur de syntaxe.
J'ai beau chercher, mais je ne trouves pas (faut dire que mon niveau de PHP est très bas)

EDIT---------------------------
J'ai trouvé !
La bonne syntaxe est :

'NAME' => 'Dont '.$tax->tax_namekey,

EDIT FIN ----------------------

D'avance merci pour votre aide,
Cordialement,
Stéphane

Dernière modification par steph38 (12-12-2016 09:53:03)

Hors ligne

Pied de page des forums