集/数组中的每个(特定大小的)组合,没有重复的项目

whi*_*sky 0 php arrays combinations permutation

假设我设置了[1、2、3、4、5、6、7]

我想要以下内容作为回报[1、2、3、4、5] [4、3、2、1、6] [7、5、1、3、2] ......... 。

本质上,正如标题所述,我希望从数组中生成特定大小的组合,但每个组合都不能有任何重复的项(因此,如果您有这个主意,则没有aaab,aaac)。

我在这里也找到了另一个问题,但在组合中却存在重复。我试图调整并编写递归函数无济于事:/

Mar*_*vin 5

好-所有可能的子集都没有重复项,并且假设顺序无关紧要,即[1, 2, 3, 4, 5]与相同[5, 4, 3, 2, 1]。简约示例:

<?php
$arr = array(1, 2, 3, 4, 5, 6, 7);

function getSubsets($set, $items) {
  $result = array();
  getSubsets2($set, $items, 0, array(), $result);
  return $result;
}

function getSubsets2($set, $items, $index, $current, &$result) {
  if (sizeof($current) === $items) {
    $result[] = $current;
    return;
  }
  if ($index < sizeof($set)) {
    getSubsets2($set, $items, $index + 1, $current, $result);
    $current[] = $set[$index];
    getSubsets2($set, $items, $index + 1, $current, $result);
  }
}

$subsets = getSubsets($arr, 5);

echo(sizeof($subsets)); // 21
?>
Run Code Online (Sandbox Code Playgroud)

别忘了别人的桂冠:这是100%基于用Java编写的另一个Stack Overflow答案