Fonction récursive: combinaisons possibles entre plusieurs tableaux

Fonction récursive: combinaisons possibles entre plusieurs tableaux - PHP - Programmation

Marsh Posté le 17-10-2010 à 12:44:15    

Bonjour tout le monde,
 
je dois calculer les combinaisons possibles entre plusieurs tableaux donnés (dont le nombre peut varier).
Voici un exemple:

Code :
  1. $tab_couleurs = array('bleu','blanc','rouge');
  2. $tab_tailles = array('M','L','XL');
  3. $tab_manches = array('manches courtes','manches longues');
  4. $tab_valeurs = array();
  5. $tab_valeurs[] = $tab_couleurs;
  6. $tab_valeurs[] = $tab_tailles;


 
//Un petit print_r() de $tab_valeurs nous donne:
Array
(
    [0] => Array
        (
            [0] => bleu
            [1] => blanc
            [2] => rouge
        )
 
    [1] => Array
        (
            [0] => M
            [1] => L
            [2] => XL
        )
    [2] => Array
        (
            [0] => manches courtes
            [1] => manches longues
        )
 
)
 
 
Le code suivant nous renvoie les combinaisons possibles:
 

Code :
  1. foreach($tab_valeurs as $tab_type_champ) {
  2.   foreach($tab_valeurs[0] as $taille) {
  3.     foreach($tab_valeurs[1] as $manches) {
  4.      echo ++$i.' - '.$couleur.' -> '.$taille.' -> '.$manches.'<br/>';
  5.  }
  6.   }
  7. }


Résultat:
 
1 - -> bleu -> M
2 - -> bleu -> L
3 - -> bleu -> XL
4 - -> blanc -> M
5 - -> blanc -> L
6 - -> blanc -> XL
7 - -> rouge -> M
8 - -> rouge -> L
9 - -> rouge -> XL
10 - -> bleu -> M
11 - -> bleu -> L
12 - -> bleu -> XL
13 - -> blanc -> M
14 - -> blanc -> L
15 - -> blanc -> XL
16 - -> rouge -> M
17 - -> rouge -> L
18 - -> rouge -> XL
 
J'aimerai pouvoir obtenir ce résultat via une fonction récursive, du type recurseTab($tab_valeurs), qui génèrerait les combinaisons possibles quel que soit le nombre de tableaux présents dans $tab_valeurs (par exemple taille+couleur, taille+couleurs+manches, taille+couleurs+manches+capuche, etc..)
 
Quelqu'un pourrait-il m'aider dans ma démarche?
 

Reply

Marsh Posté le 17-10-2010 à 12:44:15   

Reply

Marsh Posté le 17-10-2010 à 14:41:07    

tu dois rendre ça pour quand :d ?

 

je vais dire que le tableau est une pile histoire d'avoir une fonction pour prendre le dernier element du tableau

 

un code du genre

 
Code :
  1. function produit_croise(pile,prefixe ='')
  2. {
  3.     Si taille(pile) = 0
  4.         affiche(prefixe)
  5.     Sinon
  6.     tableau_courant = pop(tableau); // on enleve un tableau parmis les tableaux, donc taille de pile a diminué de 1
  7.     pour chaque élément  e de tableau_courant
  8.          produit_croise(pile,prefixe . e)
  9. }


Message édité par flo850 le 17-10-2010 à 14:41:17
Reply

Marsh Posté le 17-10-2010 à 18:26:27    

Nickel, ça fonctionne!
 
J'ai créé la fonction suivante, sur le modèle de ton exemple:
 

Code :
  1. function produit_croise($pile,$prefixe ='') {
  2.     if(count($pile)==0)
  3.         echo $prefixe.'<br/>';
  4.     else {
  5.         $tableau_courant = array_pop($pile); // on enleve un tableau parmis les tableaux, donc taille de pile a diminué de 1
  6.         foreach($tableau_courant as $e)
  7.             produit_croise($pile,$prefixe.$e);
  8.     }
  9. }
  10. produit_croise($tab_valeurs);


 
J'obtiens les bonnes combinaisons, merci!


Message édité par forzayalta le 17-10-2010 à 18:26:43
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed