Page 1 sur 1

switch

Posté : 28 juil. 2014, 15:26
par denis33
Bonjour à tous
j'ai un problème dans un switch. Je veux transformer les numéros des mois en lettre lors d'un affichage
je prends les données dans SQLite et je suis sous php 5.5.15, mais j'avais le même problème avec 5.5.12
j'ai créé une fonction avec un switch tout fonctionne bien sauf pour les mois 08 et 09 où l'affichage est 08 et 09. Il semblerait que le case 08 et 09 ne soit pas analysé. J'ai pensé à un problème d'encodage, mais dans ce cas ça me dépasse.
Quelqu'un a-t-il une idée? Elle serait la bienvenue, merci d'avance.
function decode_datea($fecha){
//code
switch($mm){
			case 00: $mm='';break;
			case 01: $mm=' jan ';break;
			case 02: $mm=' fev ';break;
			case 03: $mm=' mars ';break;
			case 04: $mm=' avr ';break;
			case 05: $mm=' mai ';break;
			case 06: $mm=' juin ';break;
			case 07: $mm=' juil ';break;
			case 08: $mm=' aout ';break;
			case 09: $mm=' sept ';break;
			case 10: $mm=' oct ';break;
			case 11: $mm=' nov ';break;
			case 12: $mm=' dec ';break; 
		}
//code
return $fecha=$mm;
}

Re: switch

Posté : 28 juil. 2014, 16:33
par Genova
Essaie de caster $mm en int, afin qu'il prenne la valeur 8 et non plus "08" :
switch((int) $mm){

Re: switch

Posté : 28 juil. 2014, 16:49
par sirakawa
Suggestion
function decode_datea($fecha){
var_dump($fecha);
//code qui doit poser problème
var_dump ($mm); die();

Re: switch

Posté : 28 juil. 2014, 16:58
par Ryle
Lorsqu'un nombre est préfixé par un 0 en php, cela indique que la "base" utilisée est de l'octal (de 0 à 7) et non du décimal (de 0 à 9). Du coup les valeur 08 et 09 engendrent des erreurs (c'est comme si tu utilisait un 2 en binaire, l'ordinateur y comprend pas :))

Comme suggéré par Genova, en convertissant ta variable en int / integer (et donc en un entier décimal), tu pourras ainsi la comparer aux valeurs 8 et 9 au lieu de 08 et 09.

Autre solution plus légère que le switch dans ton cas, tu peux utiliser un tableau associatif :
$tab = array( 0 => '' 1=> 'janv', 2 => 'fev', 3 => 'mar', ... );
echo $tab[$mm]; // affichera la valeur du tableau associée à l'index $mm

Re: switch

Posté : 28 juil. 2014, 17:08
par sirakawa
Il est quand même beaucoup plus simple de créer ces valeurs sous forme de chaine de caractères, puisque visiblement il y a un //code qui transforme le paramètre de la fonction en mm .

Re: switch

Posté : 28 juil. 2014, 17:16
par Ryle
Il est quand même beaucoup plus simple de créer ces valeurs sous forme de chaine de caractères, puisque visiblement il y a un //code qui transforme le paramètre de la fonction en mm .
Beaucoup plus simple, je ne sais pas, mais c'est effectivement une autre solution si $mm contient une chaine de caractères, il suffit de mettre des apostrophes ou des guillemets autour des valeurs à comparer des différents "case" et il n'y aura ainsi plus non plus le problème de conversion en octal :)
switch($mm){
                        case '00' : $mm='';break;
                        case '01' : $mm=' jan ';break;
                        case '02' : $mm=' fev ';break;
                        ...

Re: switch

Posté : 28 juil. 2014, 17:19
par denis33
Merci à tous
Comme l'a dit Ryle le pb venait du fait que l'ordi ne savait plus comment interprété 08 et 09 je les ai mis entre guillemets et ça marche. Je vais tester le tableau associatif.