Aller au contenu

Sujets conseillés

Posté

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.

Posté

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...

Posté

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.

Posté (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é par captain_torche
Posté

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);

++

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...