Couper une chaine [Résolu]

Signaler
Messages postés
355
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
-
Messages postés
355
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
$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.
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
salut
on peut avoir ton code ?

debuger c'est plus rapide que recreer de 0.
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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( ).

à+
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
40
$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.
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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, ',', ' ');
à+
Messages postés
355
Date d'inscription
lundi 26 juillet 2004
Statut
Membre
Dernière intervention
26 juin 2012
1
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.