Couper une chaine

Résolu
zut69 Messages postés 354 Date d'inscription lundi 26 juillet 2004 Statut Membre Dernière intervention 26 juin 2012 - 4 août 2008 à 12:26
zut69 Messages postés 354 Date d'inscription lundi 26 juillet 2004 Statut Membre Dernière intervention 26 juin 2012 - 4 août 2008 à 18:39
Bonjour,

J'ai un grand nombre sous une forme précise que je voudrais découper.

Voici un nombre: 123456789

et je voudrais faire une boucle qui mette dans une variable des nombres à 3 chiffres.

C'est à dire que dans ce cas, j'aimerais récupérer 123 puis 456 puis 789

Jusque là j'arrive à me débrouiller avec substr en coupant tous les 3, mais le souci
c est quand le nombre n'est pas un multiple de 3. Il faudrait que le nombre plus petit (à 1 ou 2 chiffres)
soit le premier à sortir.
Par exemple, si je soumets ce nombre: 12345678901

Je voudrais obtenir: 12 puis 345 puis 678 puis 901

Merci pour votre aide,

FF

6 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
4 août 2008 à 15:20
$foo = array();

$len = strlen($chaine);

$i ($len % 3 0 )?3:($len%3);
$pos = 0;
while ($pos < $len){
$foo[] = substr($chaine, $pos, $i); $i = 3; $pos += $i;
}

en separant le premier cas des autres, on peut faire plus rapide.
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
4 août 2008 à 13:21
salut
on peut avoir ton code ?

debuger c'est plus rapide que recreer de 0.
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
4 août 2008 à 15:13
Hello,

moi je sens bien un petit substr( ) pour enlever les 1 ou 2 premières lettres si ce n'est pas divisible par trois (if strlen($chaine)%3 !== 0) et ensuite un str_split( ).

à+
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
4 août 2008 à 15:20
$foo = array();

$len = strlen($chaine);

$i ($len % 3 0 )?3:($len%3);
$pos = 0;
while ($pos < $len){
$foo[] = substr($chaine, $pos, $i); $i = 3; $pos += $i;
}

en separant le premier cas des autres, on peut faire plus rapide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
4 août 2008 à 16:01
Ah et au fait, là on parle de chaîne, mais si c'est juste pour formater un nombre, tu as la fonction number_format($nombre, 0, ',', ' ');
à+
0
zut69 Messages postés 354 Date d'inscription lundi 26 juillet 2004 Statut Membre Dernière intervention 26 juin 2012 1
4 août 2008 à 18:39
Merci beaucoup pour vos réponses,la ligne vraiment utile, c est: $i ($len % 3 0 )?3:($len%3);
je me suis débrouiller comme ça:

        $len = strlen($decrypte);
            for($i=0;$i<$len;$i+=3)
            {
            if($i==0) $longueur = ($len % 3 == 0)?3:($len%3);
            $contenu.=chr(substr($decrypte,$i,$longueur);
            $longueur=3;
            $x++;
            }

En fait, c'est un code de décryptage, les 3 chiffres représente un nombre ascii
que je reconverti en lettre avec chr.
0
Rejoignez-nous