Page 1 sur 1

SWITCH : Avant de devenir fou... ?!

Posté : 09 juin 2016, 14:29
par FlorentB
Salut à tous,

Je viens vers vous pour une question ultra basique et pourtant qui va bientôt me rendre fou...

Voici mon code, un switch très simple :

Code : Tout sélectionner

echo 'Poids total : '.$poidtotal; echo '<br/>Livraison : '; switch ($poidtotal) { case ($poidtotal == 0) : echo 'Option 1'; break; case ($poidtotal > 0 && $poidtotal <= 350) : echo 'Option 2'; break; case ($poidtotal > 350 && $poidtotal <= 700) : echo 'Option 3'; break; }
La page me renvoi :

Poids total : 0
Livraison : Option 2

Au lieu de Option 1, puisque le poids est de 0.... Le script marche très bien pour les autre cas (entre 1 et 350 kg, puis 351 et 700kg), mais pas pour 0... Ca fait deux heures que je tourne en rond, alors que le code est super simple... J'ai essayé une conversion en int, j'ai essayé un <1 à la place du ==0... Mais rien ne change !

Une idée ?
Merci ;)

Re: SWITCH : Avant de devenir fou... ?!

Posté : 09 juin 2016, 14:47
par Spols
le switch n'est pas le mieux pour ça.

mais tu peux faire un switch(true) ... pour que ca marche (voir doc php)

La raison :
le switch va comparer ta valeur $poidstotal avec le résultat de tes conditions.
comme le résultat d'une condition est un booléen, php transforme ton poidtotal en booléen. 0 = false tous les autres = true
donc arrivé au premier cas, 0(FALSE) == TRUE => false
second cas : 0(FALSE) == FALSE (car 0 n'est pas strictement supérieure à 0) => TRUE

pour les autres poids, disons 351
premier cas : 351(TRUE) == FALSE (351 diférent de 0) => FALSE
second cas: 351(TRUE) == FALSE (351 est supérieur à 350) => FALSE
dernier cas: 351(TRUE) == TRUE(351 est dans ton dernier interval) => TRUE

En fait c'est un abus du language php le fait que ca marche pour autre chose que 0
donc soit tu compare true à des conditions soir tu fais une suite de if elseif

Re: SWITCH : Avant de devenir fou... ?!

Posté : 09 juin 2016, 23:03
par FlorentB
MERCI ! J'ai juste remplacé la première condition (0) par un "if" et tout fonctionne parfaitement ;) Et merci aussi pour l'explication !

Bonne soirée