Générer toutes les combinaisons d'un array muti dimensionnel

Générer toutes les combinaisons d'un array muti dimensionnel - PHP - Programmation

Marsh Posté le 30-01-2013 à 17:19:29    

Salut,
 
3h que je cherche  :pt1cable:  
 
J'ai ceci (à la place de chiffres ce sont des mots mais c'est pour l'exemple) :

Code :
  1. Array
  2. (   
  3.     ['animaux'] => Array
  4.         (
  5.             [0] => 'chat'
  6.             [1] => 'chien'
  7.         )
  8.     ['bouffe'] => Array
  9.         (
  10.             [0] => 'croquettes'
  11.             [1] => 'plantes'
  12.         )
  13.     ['logement'] => Array
  14.         (
  15.             [0] => 'maison'
  16.             [1] => 'appartement'
  17.         )
  18. ...
  19. )


 
Il peut y avoir x d'Array de premier niveau et x valeurs dans chaques array et il peut y avoir par exemple 3 valeur dans les animaux mais 10 dans la bouffe et 2 dans le logement.
 
Je cherche un moyen qui m'affichera toutes les combinaisons possibles dans l'ordre des différents array.
 
Exemple :
chat croquettes maison
chat croquettes appartement
chat plantes maison
chat plantes appartement
etc.
 
Quelqu'un sait comment faire ça ? Je devient dingue et je n'arrive à rien
 
Merci


---------------
Bha ouais mais bon, m'enfin quoi...
Reply

Marsh Posté le 30-01-2013 à 17:19:29   

Reply

Marsh Posté le 02-02-2013 à 19:15:54    

En algo pur avec fonction récursive, je dirais un truc comme ça :

Code :
  1. <?php
  2. function foo (&tab, $keys, $mots) {
  3.   if (count($keys) == 0) {
  4.     echo implode(' ', $mots). "\n";
  5.     return;
  6.   }
  7.   $key = array_shift($keys);
  8.   foreach ($tab[$key] as $e) {
  9.     $tmots = $mots;
  10.     $tmots[] = $e;
  11.     foo($tab, $keys, $tmots);
  12.   }
  13. }
  14. foo($tab, array_keys($tab), array());


 
Il est aussi possible de le faire en itératif mais la forme récursive est généralement toujours plus courte au niveau de l'écriture. Sinon il y a array_walk_recursive, faut voir si ça peut être utile.


Message édité par czh le 02-02-2013 à 19:18:26
Reply

Marsh Posté le 03-02-2013 à 18:21:33    

Merci beaucoup je teste demain au taf.
"Il est aussi possible de le faire en itératif mais la forme récursive est généralement toujours plus courte au niveau de l'écriture. "
J'ai pas compris :D
 
"Sinon il y a array_walk_recursive, faut voir si ça peut être utile"
Pour faire quoi de plus ?
 
Merci beaucoup à toi !


---------------
Bha ouais mais bon, m'enfin quoi...
Reply

Marsh Posté le 03-02-2013 à 18:22:59    

Merci beaucoup je teste demain au taf.
"Il est aussi possible de le faire en itératif mais la forme récursive est généralement toujours plus courte au niveau de l'écriture. "
J'ai pas compris :D
 
"Sinon il y a array_walk_recursive, faut voir si ça peut être utile"
Pour faire quoi de plus ?
 
Merci beaucoup à toi !


---------------
Bha ouais mais bon, m'enfin quoi...
Reply

Sujets relatifs:

Leave a Replay

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