[Php] Fonction simple avec petit bug

Résolu
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 ...
--
Google est ton ami !
Configuration: Windows XP
Firefox 3.5.6

5 réponses

  1. 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
    1. 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
      1. 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
        1. Bonjour,

          D'accord avec Mopra-L, l'utilisation du case est pas type top. :/
          Le If/Else serait mieux.
          0
      2. 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
        1. Ok bon à savoir ;)

          Merci bien.
          0