ZuckBin Posté 16 Mai 2006 Partager Posté 16 Mai 2006 Bonjour, je me retrouve avec une variable que j'arrive pas a incrémenter: $reference = $row['ref_number'];$reference = $reference+1; Un echo de $reference = $row['ref_number'] me donne: 000000000137 Lorsque je fais un echo de $reference+1, il me sort 138, qu'alors, il devrait me sortir 000000000138 Je n'arive pas à incrementer 000000000137 à 000000000138 tout simplement. Merci de votre aide, Cordialement. Lien vers le commentaire Partager sur d’autres sites More sharing options...
TheRec Posté 16 Mai 2006 Partager Posté 16 Mai 2006 Lorsque tu fais un echo de $row['ref_number'] tu affiche une chaîne de caractère (car je suppose que cela provient d'une base de données)...ce qui permet à PHP d'afficher des zéros non-significatifs... Alors que lorsque tu lui as ajouté un nombre ou effectué une autre opération mathématique, PHP s'occupe de faire la conversion de types pour toi, de chaîne de caractères à entier (ou float si tu fais une division par exemple)... Ensuite lorsque tu fais un echo de ce résultat il refait une conversion en chaîne de caractères pour l'afficher...mais tes zéros non-significatifs n'existent plus, ils sont perdus lors de la première conversion. Pour formater à l'affichage il faut utiliser sprintf ou printf ainsi, par exemple : printf("%'012d",$reference); Je te laisse lire la manuel pour la syntaxe des spécifications de conversions. P.S.: Je te conseille l'utilisation des opérateurs de post ou pre incrémentation lorsque tu veux incrémenter une varaiable...c'est plus clair à la relecture et c'est surtout plus court et plus puissant... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Vincent Posté 16 Mai 2006 Partager Posté 16 Mai 2006 c'est normal, quand tu as ta référence au départ, qui est égale à 000000000137, c'est une variables de type chaine de caractère (ou type string). Dès lors que tu commences a faire des opérations dessus, PHP te la transforme en numérique. Or dans une valeur numérique, les 0 placé avant ne sont pas significatif (000137 = 137 ) Tu as donc 2 choix, - soit tu travailles qu'avec des variables numériques - soit tu reconstruis a la fin de tes opérations un variables de type string en concaténant le bon nombre de 0 qu'il te faut pour retrouver la longueur souhaitée. Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 16 Mai 2006 Partager Posté 16 Mai 2006 (modifié) 000000000137 est considéré comme une chaîne de caractères. En l'incrémentant de 1, PHP le convertit automatiquement en entier numérique, d'où le 138. Pour avoir un affichage du genre 000000000138, il faut utiliser la fonction sprintf, avec un code du genre : <?php$variable = sprintf("%012d", $row['ref_number']+1);?> [Edit : doublement grillé] Modifié 16 Mai 2006 par captain_torche Lien vers le commentaire Partager sur d’autres sites More sharing options...
ZuckBin Posté 16 Mai 2006 Auteur Partager Posté 16 Mai 2006 Merci pour vos réponses. J'ai résolu le problème comme ceci: $reference = $row['ref_number']+1;$reference = str_pad($reference, 12, "0", STR_PAD_LEFT); ++ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant