Forum Clubic

[php] Probleme avec Switch Case

Bon le but de mon programme est tout con c’est de transformer les dates chiffré en jour et mois (par exemple: 08 —> huit pour les jours et 09 ----> Septembre pour les mois.

Mon code est le suivant:

mes deux fonctions:

function tjour($h) {
echo $h;
  switch ($h) {
case 01:
   return "premier";
   break;
case 02:
   return "deux";
   break;
case 03:
   return "trois";
   break;
case 04:
   return "quatre";
   break;
case 05:
   return "cinq";
   break;
case 06:
   return "six";
   break;
case 07:
   return "sept";
   break;
case 08:
   return "huit";
   break;
case 09:
   return "neuf";
   break;
case 10:
   return "dix";
   break;
case 11:
   return "onze";
   break;
case 12:
   return "douze";
   break;
case 13:
   return "treize";
   break;
case 14:
   return "quatorze";
   break;
case 15:
   return "quinze";
   break;
case 16:
   return "seize";
   break;
case 17:
   return "dix-sept";
   break;
case 18:
   return "dix-huit";
   break;
case 19:
   return "dix-neuf";
   break;
case 20:
   return "vingt";
   break;
case 21:
   return "vingt et un";
   break;
case 22:
   return "vingt-deux";
   break;
case 23:
   return "vingt-trois";
   break;
case 24:
   return "vingt-quatre";
   break;
case 25:
   return "vingt-cinq";
   break;
case 26:
   return "vingt-six";
   break;
case 27:
   return "vingt-sept";
   break;
case 28:
   return "vingt-huit";
   break;
case 29:
   return "vingt-neuf";
   break;
case 30:
   return "trente";
   break;
case 31:
   return "trente et un";
   break;
}
}


function tmois($h) {
echo ".".$h;
  switch ($h) {
case 01:
   return "Janvier";
   break;
case 02:
   return "Février";
   break;
case 03:
   return "Mars";
   break;
case 04:
   return "Avril";
   break;
case 05:
   return "Mai";
   break;
case 06:
   return "Juin";
   break;
case 07:
   return "Juillet";
   break;
case 08:
   return "Août";
   break;
case 09:
   return "Septembre";
   break;
case 10:
   return "Octobre";
   break;
case 11:
   return "Novembre";
   break;
case 12:
   return "Décembre";
   break;
   
  }
}

pour le resultat:


\\ $jour et $ mois sont defini par un substr qui les sort d'un fichier texte.


$j=tjour($jour);
  	
$m=tmois($mois);

echo $j;

echo $m;


Mon probleme est que le switch case ne return pas le bon string dans certains cas(j’ai pas tout tester):

sa marche pas si le jour est le 08.

sa marche pas si le mois est le 09.

par contre pour le jour 02, 15, 22 et le mois 4(Avril) sa marche.

Je ne voit pourtant aucue erreur dans mon codes.

hyper lourds et moches tes cases.
c’est du php ?

parce que si c’est le cas, il existe une fonction qui fait ce que tu veux, suffit de lui donner les bons paramètres.

http://fr2.php.net/manual/fr/function.date.php

lire la doc c’est le bien :hello:

C’est pas mais setlocale() et [url=http://www.php.net/manual/fr/function.strftime.php]strftime()](http://www.php.net/manual/fr/function.date.php) qu’il faut utiliser si il veut les date en français.
Sinon, à la place des switchs, j’aurais plutôt utilisé des tableaux (c’est vraiment moins moche que les switchs).

date() ne traduira pas en français à moins de faire un setlodale.

Par contre, oui c’est moche le switch.

Surtout quand php vient avec un mécanisme de table associative te permettant d’éviter ça…

Ensuite, 09 ne peut pas fonctionner. La notation prefixée par 0 c’est pour faire de l’octale… et 09 en octale, ben c’est pas possible…

+1 avec Raynor et le “monsieur méchant dont l’avatar à pas une tête de porte bonheur” :o

:smiley:

Aller je poste une possibilité, à SN de la réécrire en optimisé et compatible avec php 5.10.232653 nightly :ane:

<?php
$mois = array('Janvier','Février',...);
$jour =  array('Lundi','Mardi',...);

$j = 1;
$m = 1;

echo '<p>Nous sommes le '.$jour[$j-1].' 1er '.$mois[$m-1].'</p>';
// Nous sommes le Lundi 1er Janvier
?>

euh, y’a un bug là :
echo 'Nous sommes le ‘.$jour[$j-1].’ 1er '.$mois[$m-1].’;

ta chaine reste ouverte :ane:

edit : ça iras pour cette fois [:eveden]

sinon avec setlocale et strftime >


<?php
setlocale(LC_TIME, 'fr_FR');
$time = mktime(0,0,0,1,1,2006);

echo 'Nous somme le '.strftime('%A %d %B %Y', $time);
?>

:neutre:

j’ai édité :stuck_out_tongue:

+1 :smiley:

Merci a tout le monde je vais essayer plus tard la je suis présser.

Je sais que c moche ce que j’ai fait.

Mais j’ai pas compris pourquoi le 09 ne marche pas ??

Je vous tiendrai au courant.

Je suis sous php 4 :paf: !

Bah le switch c’est vraiment crade :ouch: !!
Perso je comprend même pas à quoi elle sert cette fonction car elle est laide, longue et peux être facilement remplacée :s !

Tous ensemble, BOY COTTONS ! :paf:

(presse papier)

Bonjour,

Je te prierai de mettre le langage informatique dans le titre, tel que requis par la charte du forum programmation - pour une meilleure compréhension les uns des autres.

A lire :
http://www.clubic.com/forum/charte-du-foru…on-t306797.html

Pour éditer:
Suffit de cliquer sur ce bouton, dans ton message : http://www.clubic.com/forum/style_images/persoclubic/editer.gif

(note : ce message est un gros copier coller, ne pas répliquer derrière)


09 ne fonctionne pas, parce que c’est de l’octale.

On lit ça :

http://fr.php.net/manual/en/language.types.integer.php

Non. Le switch est une bonne structure mais mal utilisée. C’est tout.

J’aurai plutôt fait commencé tes index de tableau à 1 ( $mois = array(1 => ‘Janvier’,‘Février’,…); ) mais bon :slight_smile:

Je me suis souvent demandé à quoi elle pouvait bien servir cette structure. Je suis plutôt de l’avis de DarKChAm, mais si tu as un exemple de bonne utilisation sous la main, je serais curieux de le voir.

Je m’en sers dés que je le juge utile. Mais je n’ai pas d’exemple. Je dirais que si tu peux remplacer par un tableau associatif c’est que c’est inutile.