获取X组中N个项目的所有可能组合

时间:2010-06-19 23:13:23

标签: php recursion combinations

我有一个可以在数量上变化的组列表,这些组中的项目的数量也各不相同。我一直绞尽脑汁想要从每个小组中获得所有可能的1项组合。

奖励:我还需要不包含群组中所有项目的所有组合。

我已经看到并完成了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
    )
)

1 个答案:

答案 0 :(得分: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;
}