【问题标题】:Getting all possible combinations of N items in X Groups获取 X 组中 N 项的所有可能组合
【发布时间】:2010-06-19 23:13:23
【问题描述】:

我有一个数量可能不同的组列表,这些组中的项目数量也不同。我一直在想办法从每个组中获取 1 项的所有可能组合。

奖励:我还需要所有组合,而不是一组中的所有项目。

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

为了更具体地说明我在做什么,我想根据产品选项生成具有准确定价的产品。这是一个示例列表:

所以它会生成如下产品:

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
    )
)

【问题讨论】:

  • 澄清一下,您希望从每个组中选择一个元素的所有可能组合?
  • 是的,所有组合都使用每个组中的一个元素。

标签: php recursion combinations


【解决方案1】:

试试这个:

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;
}

【讨论】:

  • 我认为你在做某事!它似乎只给了我数组最后两组的组合。不过我现在正在玩它,我会回来报告的。
  • 好的,我把范围缩小到它只从数组中的最后 2 个组中获取组合。它会多次组合。不过,我仍在使用它。
  • 天才!你让我开心,为我节省了很多时间!谢谢喵喵!
猜你喜欢
  • 1970-01-01
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多