来自set / array的每个(特定大小)组合,没有重复项

时间:2015-03-02 01:01:22

标签: php arrays combinations permutation

让我说我有     set = [1,2,3,4,5,6,7]

我想要以下回报     [1,2,3,4,5]     [4,3,2,1,6]     [7,5,1,3,2] ..........

基本上,正如标题所述,我希望从数组中生成特定大小的组合,但每个组合都不能有任何重复的项目(所以没有aaab,aaac如果你明白了)。

我在这里也发现了另一个问题,但它在组合中有愚蠢。我试过调整和编写递归函数无济于事:/

1 个答案:

答案 0 :(得分:4)

好的 - 所有可能的子集没有重复,并假设顺序无关紧要,即[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
?>

不要带走别人的桂冠:这是100%基于another Stack Overflow answer written in java