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 :

[Tableaux] Comparaison de valeur qui ne marche pas sans un Cast (string)


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut [Tableaux] Comparaison de valeur qui ne marche pas sans un Cast (string)
    Bonjour à tous,

    j'ai un fonctionnement très bizarre dans un "if". La condition n'est pas vérifiée et pourtant je passe dans le "if". Je m'explique avec le code.

    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
    19
    20
    21
    22
    23
    24
    25
    26
    while (list($columns, $value) = each($data)) {
            switch ((string)$value) {
     
              default: 
     
    		    if($value=="@INCREMENTATION@")
    			{
    				$query .= $columns . " = " . $columns . " + 1, ";
    			}else{
    				if($value=="@DECREMENTATION@")
    				{
    					$query .= $columns . " = " . $columns . " - 1, ";
    				}else{
     
    					if( substr((string)$value, 0, 13)=="ADDFIELDVALUE")
    					{	
    						$query .= $columns . ' = ' . substr($value,14) . ", ";
     
    					}else{
    						$query .= $columns . ' = \'' . tep_db_input($value) . '\', ';
                		}
    				}
    			}
                break;
            }
          }
    Voila la parcelle de code, incriminée. La variable $data est un tableau, que j'ai initialisé de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $valeur=0;
    $data = array('valeur' => $valeur);
    Donc si je passe dans la moulinette ci dessus, je ne devrais pas passer dans les conditions if ="@INCREMENTATION@" et if = "@DECREMENTATION@". Et pourtant il passe dans la premier if, comme ci, $value valait "@INCREMENTATION@" !!!!! Hors on est d'accord que $value est égal à 0.

    Le seul moyen pour que ca marche, c'est de faire un Cast en String de $value et la ça va fonctionner ........

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if((string)$value=="@INCREMENTATION@")
    Est ce que quelqu'un peut m'expliquer pourquoi ?

    Merci par avance de votre réponse.

    Brice

  2. #2
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2002
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2002
    Messages : 98
    Points : 169
    Points
    169
    Par défaut
    Pour commencer le switch il sert à rien ...

    Ensuite c'est tout à fait normal qu'il entre dans le if, comme l'indique la documentation :

    Si vous comparez un entier avec une chaîne, la chaîne est convertie en un nombre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    var_dump(0 == "a"); // 0 == 0 -> true
    var_dump("1" == "01"); // 1 == 1 -> true
     
    switch ("a") {
    case 0:
        echo "0";
        break;
    case "a": // jamais évalué parce que "a" est déjà trouvé avec 0
        echo "a";
        break;
    }
    ?>
    Sinon au lieu de faire un cast vous pouvez utiliser l'opérateur ===

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 147
    Points : 64
    Points
    64
    Par défaut
    Merci Citrix,

    Oui le switch ne sert a rien en l'état car je n'ai pas énuméré tout le code.
    En tout cas merci de ta démonstration Citrix, je vais maintenant caster systématiquement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/11/2010, 23h58
  2. [RegEx] Comparaison de chaine qui ne marche pas
    Par taki_38 dans le forum Langage
    Réponses: 6
    Dernier message: 22/06/2006, 20h41
  3. Iptables configuration qui ne marche pas....
    Par The_Nail dans le forum Sécurité
    Réponses: 7
    Dernier message: 03/02/2004, 14h27
  4. Réponses: 3
    Dernier message: 08/09/2003, 15h06
  5. Réponses: 9
    Dernier message: 07/05/2003, 12h57

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