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