IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

problème avec switch et valeur 0


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 77
    Points : 55
    Points
    55
    Par défaut problème avec switch et valeur 0
    bonjour à tous,

    j'ai une erreur et je ne voit pas ou elle est. Quand $niveau est égale à 0, le programme exécute case ($niveau >1 and $niveau < 6) alors qu'il devrait exécuter default.
    Si je met case ($niveau >1 or $niveau < 6) alors le programme exécute case ($niveau == 7).
    Pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    switch ($niveau){
    case ($niveau >1 and $niveau < 6) :	
    .....;
    break;
    case ($niveau == 7) :
    .....;
    break;
    case ($niveau ==6 or $niveau==8) :
    .....;
    break;
    case ($niveau>8):
    .....;
    break;
    default :
    .....;
    break;
    }

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 194
    Points : 216
    Points
    216
    Par défaut
    je ne savais pas qu'on pouvait mettre des conditions dans un switch.....

    pour moi switch ça aurait plutot été un truc du genre


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    switch ($niveau){
    case (1) :	
    .....;
    break;
    case (2) :
    .....;
    break;
    case (3) :
    .....;
    break;
    default :
    .....;
    break;
    }
    ou alors
    des if avec des conditions



    mais je ne connaissais pas ce que tu fais
    soit tu viens de me faire découvrir qqch soit tu es violent...

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    Ca fonctionne, j'ai testé mais par contre ça ne fonctionne pas avec $niveau = 0 et je ne comprend pas pourquoi.
    C'est méthode est plus agréable a écrire qu'une série de if.

  4. #4
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Salut
    c'est plus agréable a écrire.... Mais est ce plus logique et facile a lire qu'une série de if avec des else if?
    tu as testé sans ton switch? avec la série de if comme ca?

    et je crois que ca provient de là ton trouble...
    un ET c'est pas "and" mais bien &&
    un ou n'est pas "or" mais ||



    sinon essaie avec une série de if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    if ($niveau >1 && $niveau < 6){	
    .....;
    }
    else if ($niveau == 7){
    .....;
    }
    else if ($niveau == 6 || $niveau==8){
    .....;
    }
    else if ($niveau>8){
    .....;
    }
    else{
    .....;
    }

  5. #5
    Membre régulier Avatar de achos
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 147
    Points : 84
    Points
    84
    Par défaut
    Bonjour,
    essaye de ajouter un cas pour $niveau ==0;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    case ($niveau ==0):
    .......
    break;

  6. #6
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    J'ai donc finalement opter pour la série de if car même avec case $niveau == 0 sa ne fonctionne pas. Le niveau 0 entre toujours dans le premier cas.
    Même en mettant && à la place du and et || à la place du or.

    Je ne comprend pas pourquoi ?
    Enfin tanpis pour cette fois.
    Par contre je vais continu à chercher pourquoi ça ne fonctionne pas avec 0.

  7. #7
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    pour les opérateurs y a pas de prob, && = and et || = or

    par contre je savais pas du tout qu'on pouvait faire un switch comme ça
    je vois pas bien l'intérêt par rapport à un if...else if...else mais bon

    essaie en mettant mieux les parenthèses autour de tes conditions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    switch($x) {
      case (($x > 6) and ($x < 10)) :
        echo '1er cas'; break;
      case (($x > 0) and ($x < 6)) :
        echo '2ème cas'; break;
    }

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 77
    Points : 55
    Points
    55
    Par défaut
    ca change rien.

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    Bonjour,

    A la place de :
    mets

  10. #10
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708
    Par défaut
    true ça vaut 1, point barre

    l'intérêt de faire ça, c'est... ?

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Points : 1 357
    Points
    1 357
    Par défaut
    si $niveau vaut 2, ($niveau >1 and $niveau < 6) retourne true, point barre.

    Quand à l'intérêt technique de la chose : aucun, car après test du switch comparé à la même chose avec des if, sur une boucle de 10000 itérations, ceux-ci (les if) sont environ 1000 fois plus rapides.

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    La structure "if else" est bien souvent plus performante que les structures de switch, et ce dans plusieurs langages. Il s'agit souvent d'un choix de lisibilité.

    Je choisis aussi les "if" mais en enchaînant des "elseif" au lieu de "else if".

    Cela revient au même mais c'est pas pareil...

    Un post récent traitait de cette question, j'ai la flemme de le retrouver.

  13. #13
    Membre éclairé
    Avatar de Dia_FR
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2006
    Messages : 512
    Points : 708
    Points
    708

Discussions similaires

  1. Problème avec Switch
    Par Super2006 dans le forum Débuter
    Réponses: 5
    Dernier message: 29/05/2009, 18h00
  2. problème avec liste de valeur
    Par Golgotha dans le forum SQL
    Réponses: 12
    Dernier message: 16/01/2009, 08h40
  3. Problème avec application.run([VALEURS.UNIQUES],"plage",1)
    Par gregyard@hotmail.com dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 18/01/2008, 11h31
  4. Problème avec Me.RecordSource : valeur non conforme
    Par Tchupacabra dans le forum Access
    Réponses: 6
    Dernier message: 02/12/2005, 17h01
  5. [Tableaux] Problème avec Switch case
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 07/09/2005, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo