2010-06-19 64 views
3

我有一个组数量可能不同的组列表,这些组中的项目数量也各不相同。我一直在想方设法从每个组中获得1项物品的所有可能组合。获取X个组中的N个项目的所有可能组合

奖励:我还需要所有组合中没有每个项目的组合。

我已经看到并完成了什么是mentioned before,但这需要知道开始的组数。

为了更具体地了解我在做什么,我想生成具有基于产品选项的准确定价的产品。下面是一个例子列表:

Group/Item Example

因此,这将产生的产品,如:

UV上光,数量500,彩色4:0
UV上光,数量500,彩色4:1
等...

这些组中的每个组都有一个ID,每个项目都有一个Group_Item_ID。所以我可以把它们放在一个阵列中,例如:

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

希望我解释得不错。当组的数量也是可变的时,我只是无法围绕如何做到这一点。

下面是组及其项的例子。数组:

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

为了澄清,你想从每个组中选择一个元素的所有可能的组合? – 2010-06-19 23:18:46

+0

是的,所有组合都使用每个组中的一个元素。 – drewjoh 2010-06-21 03:18:35

回答

4

试试这个:

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

我认为你正在尝试一些东西!它似乎只给了我最后两组数组的组合。我现在正在玩它,并会报告回来。 – drewjoh 2010-06-21 03:20:03

+0

好吧,我缩小了它只能得到阵列中最后2组的组合。而且它会多次组合。尽管如此,我仍然在努力。 – drewjoh 2010-06-21 04:38:57

+1

对不起!我在代码中犯了一个小错误,现在已经修复了。 – Mewp 2010-06-21 12:18:50

相关问题