[Php] Fonction simple avec petit bug

Résolu/Fermé
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 - 21 déc. 2009 à 10:51
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 - 21 déc. 2009 à 12:22
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 ?

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 ...
A voir également:

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.
1
biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012 106
21 déc. 2009 à 11:56
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 comprendre
case ( 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.
1
Mopra-L Messages postés 146 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 23 mai 2012 6
21 déc. 2009 à 11:05
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 ?
0
biboo_ Messages postés 1249 Date d'inscription jeudi 20 août 2009 Statut Membre Dernière intervention 14 mars 2012 106
21 déc. 2009 à 11:17
Bonjour,

D'accord avec Mopra-L, l'utilisation du case est pas type top. :/
Le If/Else serait mieux.
0
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
21 déc. 2009 à 11:52
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djflexlive Messages postés 557 Date d'inscription mercredi 26 mars 2008 Statut Membre Dernière intervention 23 avril 2015 95
21 déc. 2009 à 12:22
Ok bon à savoir ;)

Merci bien.
0

Discussions similaires