2010-06-19 8 views
3

J'ai une liste de groupes qui peuvent varier en nombre, avec des éléments de ces groupes dont le nombre varie également. Je me suis creusé la tête sur un moyen d'obtenir toutes les combinaisons possibles de 1 élément de chaque groupe. Bonus: J'ai également besoin de toutes les combinaisons de ne pas avoir tous les articles d'un groupe.Obtention de toutes les combinaisons possibles de N éléments dans les groupes X

J'ai vu et fait ce qui était mentioned before, mais cela nécessite de connaître le nombre de groupes pour commencer.

Pour être plus précis sur ce que je fais, je voudrais générer des produits avec des prix exacts basés sur des options de produits. Voici une liste d'exemples:

Group/Item Example

Il générerait des produits tels que:

revêtement UV, Qté 500, Couleur 4: 0
revêtement UV, Qté 500, Couleur 4: 1
etc. ...

Chacun de ces groupes a un ID et chaque élément a un ID_Item_Groupe. Donc, je peux les mettre dans un tableau tel que:

$selections[1][...] // 1 = Coating 
$selections[2][...] // 2 = Quantity 
// ... = all selected Items in group 

Espérons que je l'ai expliqué assez bien. Je ne suis tout simplement pas capable de comprendre comment procéder lorsque le nombre de groupes est également variable.

Voici un tableau d'exemple pour les groupes et leurs produits

Array 
(
[0] => Array 
    (
     [0] => 2 
     [1] => 3 
    ) 

[1] => Array 
    (
     [0] => 10 
     [1] => 11 
     [2] => 12 
    ) 

[2] => Array 
    (
     [0] => 16 
     [1] => 17 
    ) 

[3] => Array 
    (
     [0] => 19 
     [1] => 20 
    ) 
) 
+0

Pour clarifier les choses, vous voulez toutes les combinaisons possibles d'un élément choisi dans chaque groupe? –

+0

Oui, toutes les combinaisons utilisant un élément de chaque groupe. – drewjoh

Répondre

4

Essayez ceci:

function c($groups, $prefix='') 
{ 
    $result = array(); 
    $group = array_shift($groups); 
    foreach($group as $selected) { 
     if($groups) { 
      $result = array_merge($result, c($groups, $prefix . $selected. ' ')); 
     } else { 
      $result[] = $prefix . $selected; 
     } 
    } 
    return $result; 
} 
+0

Je pense que vous êtes sur quelque chose! Il semble me donner seulement les combinaisons des deux derniers groupes du tableau. Je joue avec ça en ce moment et je ferai rapport. – drewjoh

+0

Ok, je l'ai réduit au fait qu'il n'obtient que des combinaisons des 2 derniers groupes du tableau. Et il fait les combinaisons plusieurs fois. Je travaille toujours avec ça. – drewjoh

+1

Désolé! J'ai fait une petite erreur dans ce code, c'est corrigé maintenant. – Mewp