[Php] Fonction simple avec petit bug
Résolu
djflexlive
Messages postés
577
Statut
Membre
-
djflexlive Messages postés 577 Statut Membre -
djflexlive Messages postés 577 Statut Membre -
Bonjour,
Voici une fonction simple qui me permets de mettre des étoiles selon une valeur de 0 à 100. La fonction est correcte sauf pour une valeur de 0 ; je comprends pas trop ...
Qui aurait une idée svp ?
Les valeurs de 10 à 100 fonctionnent (1/2 étoile et 5 étoiles). Pour une valeur de 0 ; j'ai 5 étoiles ...
--
Google est ton ami !
Voici une fonction simple qui me permets de mettre des étoiles selon une valeur de 0 à 100. La fonction est correcte sauf pour une valeur de 0 ; je comprends pas trop ...
Qui aurait une idée svp ?
function note_show() {
global $note_value;
$value = $note_value/20;
for ( $i = 0; $i < 5; $i++) {
switch ($value) {
case ( $value > $i+0.5 ):
echo '<img src="/images/etoil_full.png" alt=""/> ';
break;
case ( $value == $i+0.5 ):
echo '<img src="/images/etoil_semi.png" alt=""/> ';
break;
case ( $value <= $i ):
echo '<img src="/images/etoil_empty.png" alt=""/> ';
break;
}
}
}
Les valeurs de 10 à 100 fonctionnent (1/2 étoile et 5 étoiles). Pour une valeur de 0 ; j'ai 5 étoiles ...
--
Google est ton ami !
Configuration: Windows XP Firefox 3.5.6
5 réponses
-
Bonjour
C'est syntaxiquement correct, mais ça ne fait certainement pas ce que tu veux. En effet, case ( $value > $i+0.5 ) ne signifie absolument pas "dans le cas où $value est supérieur à $i+5". Regarde la signification du switch ... case : on calcule ce qu'il y a dans le switch (ici une simple variable) et ce qu'il y a dans le case. Ce que tu as mis dans le case, c'est une comparaison, c'est à dire un truc qui est soit vrai soit faux.
Si $value vaut 0, $value > $i+0.5 est faux. Mais $value est lui-même faux (car 0 = faux). Donc la variable du switch ($value) est bien égale à l'expression du case ( $value > $i+0.5 ) puisque les deux sont égaux à faux. Donc on exécute ce case là
Voilà pourquoi ça ne marche pas comme tu veux.
Avec des 'if' tu t'en sortiras sans problème. -
Parce que dans le switch, les case font références à des entiers ou des strings tandis que dans ton cas, tu fais références à un booléen :
il ne faut pas comprendrecase ( x > y )
comme "dans le cas où x est supérieur à y", mais comme
"si ta $value est aussi vrai que x est supérieur à y" ce qui n'a strictement aucun sens dans la logique (bien que ça soit syntaxiquement cohérence. -
Bonjour,
Je peux me tromper, mais est-ce correct d'utiliser le switch case comme ca ? C'est a dire, de tester une condition d'égalité dans le case ?
Peut-être qu'en remplaçant par des if else, ce sera mieux ? -
En effet avec des if, ca passe sans problèmes. Merci à vous trois.
A part pour l'explication donné par "le père" ; pourquoi l'utilisation du switch n'était pas bonne ? Trop simple comme conditions pour utiliser le switch ? -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -