Page 1 sur 1

J'aimerais combiner deux test pour avoir un résultat global sous forme True/False

Posté : 28 nov. 2016, 19:36
par steph3838
Bonjour,

Je travaille sur un test dans le panier de Hikashop dont selon le contenu je réécris les liens d'un menu de Joomla! avec ReReplacer de RegularLabs, bref.

Les deux tests suivants fonctionnent très bien ainsi :
test 1

Code : Tout sélectionner

$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; }
Test 2

Code : Tout sélectionner

$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; }
je veux les combiner avec les règle suivante :
Test 1 = true ET test 2 = true <=> résultat global = true sinon résultat global = flase

j'ai écris ce code mais ne suis pas du tout sur de ma syntaxe (PHP n'est vraiement pas mon fort... :( )

Code : Tout sélectionner

$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 $result = false; } return $result = true; } //test2 $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 $result1 = false; } return $result1 = true; } //test1 AND 2 if ($result = true && $result1 = true); { return true; } else { return false; }
dans ce code je veux stocker le résultat des test 1 et deux dans deux variables pour ensuite appliquer ma règle et obtenir un résultat global à true ou false.

D'avance merci pour votre aide et vos éclairages
Cordialement,
Steph

Re: J'aimerais combiner deux test pour avoir un résultat global sous forme True/False

Posté : 28 nov. 2016, 20:52
par steph3838
Est-ce que ce code ne répondrait pas à mon attente ?

Code : Tout sélectionner

$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; }
D'avance merci pour votre aide,
Cordialement,
Steph

Re: J'aimerais combiner deux test pour avoir un résultat global sous forme True/False

Posté : 28 nov. 2016, 23:04
par steph3838
j'ai essayé ceci :

Code : Tout sélectionner

$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 toujours des erreurs...

je ne sais pas ce qui ne vas pas dans mon code...
je suppose que c'est ma variable $result... en fait il me faut un état true/false comme résultat et je ne suis pas sur que ma variable soit le bon choix... je ne vois pas comment faire... je cherche...

D'avance merci pour votre aide,
Cordialement,
Steph

Re: J'aimerais combiner deux test pour avoir un résultat global sous forme True/False

Posté : 29 nov. 2016, 01:20
par Naroth
Bonsoir,

Code : Tout sélectionner

$match_products = array(9,10,11); //Test 1 $cartClass = hikashop_get('class.cart'); $cart = $cartClass->loadFullCart(); $match1 = false; foreach($cart->products as $product){ if(in_array($product->product_id, $match_products)) { $match1 = true; } $match1 = false; } //Test 2 $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)) { $match2 = true; } $match2 = false; } //Si match1 ou match2 vaut false, globalMatch vaut false. //Si les deux valent false globalMatch vaut false. //Si les deux valent true, globalMatch vaut true. $globalMatch = $match1 && $match2; return $globalMatch
Voici une solution possible

Re: J'aimerais combiner deux test pour avoir un résultat global sous forme True/False

Posté : 29 nov. 2016, 01:33
par steph3838
Merci Naroth,

Mais cela ne fonctionne pas... du moins pas là où je l'utilise...
est ce que la variable $globalMatch est de type booléenne (true/false) ou string ?

si ce n'est pas un résultat de type true/false que je délivre cela ne fonctionne pas...

D'avance merci pour votre aide,
Cordialement,
Steph

Re: J'aimerais combiner deux test pour avoir un résultat global sous forme True/False

Posté : 29 nov. 2016, 10:19
par Spols
Dans le code de Naroth, $match2 n'est pas initié, mais ca devrait pas poser de soucis
$globalMatch sera un booléen c'est sur.

Quand tu dis que cela ne fonctionne pas, y a t il des messages d'erreur ? si oui, donne les nous sinon explique nous ce qui ne fonctionne pas.

Code de Naroth corrigé
si la boucle trouve un résultat positif, pas besoin de la continuer
$match_products = array(9,10,11);

//Test 1
$cartClass = hikashop_get('class.cart');
$cart = $cartClass->loadFullCart();
$match1 = false;

foreach($cart->products as $product){
  if(in_array($product->product_id, $match_products))
   {
      $match1 = true;
     break;
   }
$match1 = false;
}

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

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

//Si match1 ou match2 vaut false, globalMatch vaut false. 
//Si les deux valent false globalMatch vaut false.
//Si les deux valent true, globalMatch vaut true.
$globalMatch = $match1 && $match2;

return $globalMatch

Re: J'aimerais combiner deux test pour avoir un résultat global sous forme True/False

Posté : 29 nov. 2016, 12:41
par Naroth
Merci Spols de m'avoir corrigé
j'ai écris la chose un peu tard je dois bien l'avouer.

Le problème de mon code est qu'il renvoie false dans tous les cas.
Je suppose que c'est pour cela que tu dis qu'il ne marche pas ?