Bonjour,

Je recherche comment faire ceci en PHP :

(a+b+c)*(p+g+r+s)*(m+n+o)*(a+b+c)*(t+u+v)*(d+e+f) = apmatd+apmate+apmatf+apmaud+....
soit ceci :

Le principe c'est de faire les "multiplications" les unes après les autres:

L = {a,b,c}
L = L*{p,g,r,s}
L = L*{m,n,o}
...

A chaque étape, on "multiplie" la liste existante avec le nouveau paquet de lettres. Ça revient a dupliquer la liste existante et ajouter une lettre au bout de chaque élément de la liste:

L={a,b,c}
L*{p,g,r,s} = {L*p , L*g, L*r, L*s }

avec:
L*p= {a,b,c}*p = {ap,bp,cp}
L*g= {a,b,c}*g = {ag,bg,cg}
...

d'où:
L*{p,g,r,s} = {ap,bp,cp,ag,bg,cg,ar,br,cr,as,bs,cs}
Vous me direz, fais des boucles imbriqué. Ok, mais je ne connais pas la profondeur de champ. je peux avoir 2 groupe de caractères comme 5 groupes.

une personne du forum m'a proposé un algo, mais j'ai du mal à la comprendre pour le transcrire en PHP :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 // LettersCount: nombre total de lettre du mot
 // Words       : liste des mots à construire
 // CharLists[i]:  liste des caractères possible pour la ième touche tapée.
// procedure principale 
Words.Clear() ;
Words.Add("") ;
For i=0 to LettersCount-1 do AddCombination(Words,CharLists[i]) ;
 
// procedure appelée
procedure AddCombination(Words ,CharList)
For j=1 To CharList.Count-1 
     do for k=0 To Words.Count-1 do 
          Words.Add(Words.Add(Words[k]+Charlist[j]) ;
for k=0 To Words.Count-1 do 
     Words[k]=Words[k]+CharList[0]) ;
return
Auriez vous des idées de solutions ?
Merci d'avance

Cordialement

Arnaud