Pb switch php

Invité
Invité n'ayant pas de compte PHPfrance

19 nov. 2009, 12:35

Bonjour à tous,

J'ai un petit problème avec un switch en php.

Voici mon code :
switch ($this->form)
{	
        case "1.1":
        echo $this->form;
        break;
        ....
	case "1.10":
        echo $this->form;
        break;
}
J'ai l'impression que je ne fait pas d'erreur et pourtant quand ma condition vaut "1.10" je rentre dans le cas "1.1" :? :? :?
C'est possible de corriger cela ?? surement mais pour moi je ne voit pas :x

ViPHP
ViPHP | 1136 Messages

19 nov. 2009, 12:39

Salut ,

quel est le type de "$this->form" ?

peux tu nous renvoyer le résultat d'un var_dump($this->form); ?

Ch.

Invité
Invité n'ayant pas de compte PHPfrance

19 nov. 2009, 12:47

C'est une chaine de caractère (string) qui prend les valeur suivantes :

1.1
1.2
1.3
...
1.10

var_dump($this->form);

ViPHP
ViPHP | 1136 Messages

19 nov. 2009, 12:51

J'ai l'impression que le switch , convertis ta chaine en float , même en forçant le type .

j'ai réussit à avoir le résultat que tu attends uniquement en utilisant la signature des chaines ( md5 )
$toto   =    md5("1.10");
//settype($toto, "string");

            switch ($toto)
            {
                    case md5('1.1'):
                    echo "coucouA";
                    break;
                    
                    case md5('1.10'):
                    echo "coucouB";
                    break;
            }
... mais je continue de chercher ...

Ch.

Invité
Invité n'ayant pas de compte PHPfrance

19 nov. 2009, 12:53

Je te remercie de ton aide moi je bloque :|

ViPHP
ViPHP | 1136 Messages

19 nov. 2009, 12:56

D'aprés la doc ,

switch/case provoque une perte de comparaison.


J'ai donc testé avec des if comme ceci :
if($toto == '1.1'){
    echo "coucouAA";
}
if($toto == '1.10'){
    echo "coucouBB";
}
ca ne fonctionne pas non plus ... j'ai donc fait une comparaison aussi sur le type :
if($toto === '1.1'){
    echo "coucouAA";
}
if($toto === '1.10'){
    echo "coucouBB";
}
Et là ça fonctionne ...

Donc deux solutions ..
utiliser la signature des chaines , ou utiliser des if avec une comparaison de valeur et de type.

Ch.

Invité
Invité n'ayant pas de compte PHPfrance

19 nov. 2009, 13:03

Merci à toi .

Donc j'ai opter pour la deuxième solution :
case "1.1":
	if($this->form === '1.1'){
	}
	if($this->form === '1.10'){
	}
voilà pas d'autre solution