Page 1 sur 1

Ajouter des "0" devant une ID en fonction de l'ID

Posté : 12 mars 2010, 19:49
par visualight
Salut,

Désolé de ne pas être plus clair dans le titre mais je ne voyais pas quoi dire d'autre.
Aujourd'hui, je recherche à ajouter des "0" dans des id (renvoyées par POST ==> 1 ID par POST).

Le nombre de 0 que je dois afficher devant l'ID dépend de l'id récupérée...

En effet, si j'ai une ID de 1 à 9, je dois afficher 5 zeros devant l'id ==> Exemple : 000001, 000002, ... 000009
Maintenant si j'ai une ID de 10 à 99, je dois afficher 4 zeros devant l'ID ==> Exemple : 000010, ... 000099
Et ainsi de suite ... si j'ai une ID de 1000 à 9999, je dois afficher 2 zeros, Etc ... (jusque 100000 à 999999 -> il n'y a plus de 0)

Comment puis-je tester le nombre de chiffres que me retourne une ID pour savoir le nombre de zeros que je dois ajouter devant ?

Peut être n'est-ce pas la bonne solution et qu'un regex ou autre viendrait à bout de cela ... ???

Merci pour vos réponses,
raph

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 12 mars 2010, 20:30
par Dr@ke
Avec ou strlen() ou mb_strlen() :
http://php.net/manual/fr/function.strlen.php
http://www.php.net/manual/fr/function.mb-strlen.php

Et éventuellement utiliser explode() avant si ton ID ne contient pas que des chiffres...

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 12 mars 2010, 22:04
par pascaltje
ça peut se faire directement avec cette fonction : http://fr.php.net/manual/fr/function.sprintf.php

A+

Pascal

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 12 mars 2010, 22:27
par visualight
Merci pour vos réponses.

J'ai fait ça avec strlen mais c'est assez lourd et pas très dynamique (si l'id est suppérieure à 999999, il faut que je remodifie ma fonction) ...
Je me disait, vu le message de pascaltje, que j'allais utiliser la fonction sprintf mais je dois avouer que l'établissement d'un masque est assez difficile pour moi.
$galid = $row['gallery_id'];
	 	 
 
	function classement ($id) {
	 $countid = strlen($id);
		 
		if ($countid == 1) {
		 return '00000';
		} elseif ($countid == 2) {
		 return '0000';
		} elseif ($countid == 3) { 
		 return '000';
		} elseif ($countid == 4) {
		 return '00';
		} elseif ($countid == 5) {
		 return '0';
		} elseif ($countid == 6) {
		 return '';
		}
	}
	
	 $zero = classement($galid);

        //Si l'id = 1, $Int_Title doit normalement afficher : 000001
	 $Int_Title = $zero.$galid;
Pouvez-vous m'aider à améliorer cette fonction voire me donner une sérieuse piste de fonctionnement avec sprintf ?

Merci,
raph

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 12 mars 2010, 23:00
par Dr@ke
Je laisse à pascaltje le soin de répondre pour sprintf.

Sinon, ceci devrait fonctionner:
echo substr_replace('000000', $id, '-' . strlen($id));
à quelque chose près, pas testé... :wink:

http://www.php.net/manual/fr/function.s ... eplace.php

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 12 mars 2010, 23:10
par pascaltje
L'exemple 6 de la page :
printf("[%06s]",   $s);
Qui doit faire :
- remplir par la gauche...
- avec des 0 ...
- pour faire une chaine de 6 caractères maximum

A+

Pascal

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 12 mars 2010, 23:10
par stopher
Salut ,

il existe simplement la fonction str_pad

exemple :
$input = "10";
$newid = str_pad($input, 6, "0", STR_PAD_LEFT);//newid => 000010;
Voici la doc : str_pad

Bonne continuation ,
Ch.

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 13 mars 2010, 00:12
par visualight
Merci pour vos réponses à tous !
J'ai finalement opté pour la solution de dr@ke utilisant le "substr_replace".
function classement ($id) {
 return substr_replace('000000', $id, '-' . strlen($id));
}

$galid = $row['gallery_id'];
$title = $row['gallery_title'];
$Int_Title = classement($galid).'-'.$title; // return -> 000001-[titleofthepage] for id 1

Encore merci pour tout,
raph ;)

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 13 mars 2010, 00:39
par Dr@ke
Pour être sincère ma solution est la moins appropriée dans ton cas:
Si c'est juste pour directement afficher $id, alors le printf est fait pour cela.
Si c'est pour traiter $id alors str_pad, est la fonction faite pour cela.
La mienne fonctionnant très bien mais c'est ce compliquer la vie pour rien :wink:

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 13 mars 2010, 12:12
par visualight
Edit : Mise à jour de la fonction en utilisant str_pad suivant les bon conseils de dr@ke.
	
function classement ($id, $title) {
return str_pad($id, 6, "0", STR_PAD_LEFT).'-'.$title;
}
		
$galid = $row['gallery_id'];
$title = $row['gallery_title'];

$Int_Title = classement($galid, $title);  // return -> 000001-[titleofthepage] for id 1

Merci !!

Raph

Re: Ajouter des "0" devant une ID en fonction de l'ID

Posté : 13 mars 2010, 14:16
par dunbar
Salut ,

il existe simplement la fonction str_pad

exemple :
$input = "10";
$newid = str_pad($input, 6, "0", STR_PAD_LEFT);//newid => 000010;
Voici la doc : str_pad

Bonne continuation ,
Ch.
stopher avant Dr@ke :wink: