表中数组的组合

时间:2013-03-06 11:39:28

标签: php arrays combinations

我有一个包含10个数字的数组。 我希望所有可用的10个数字的所有组合。但是,顺序是不相关的。也就是说,我不希望以不同的顺序组合相同的数字(生成1,2,3之后不应出现2,3,1)。此外,数字不应在组合内重复(即没有1,1,1)。 我知道如何使用foreach创建表,但我仍然坚持如何生成可能的组合。 谢谢你的帮助!

3 个答案:

答案 0 :(得分:0)

一种好方法是使用array_unique()删除数组中的重复项。然后,每次使用元素时,都应使用array_pop()弹出它,以便不再使用它。

答案 1 :(得分:0)

数字不能重复,那么这是否意味着1,2,1也是不允许的?如果是这样,作为第一步,删除给定集合中的所有重复数字,如死锁所示。然后使用算法查找组合。许多此类算法都包含在其他用户建议的“重复”问题中。

答案 2 :(得分:0)

借用user187291的回答here,并根据您的需求进行一些修改,以下内容应该是您想要的:

$a = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

$len  = count($a);
$list = array();

for($i = 1; $i < (1 << $len); $i++) {
    $c = '';
    for($j = 0; $j < $len; $j++)
        if($i & (1 << $j))
            $c .= ',' . $a[$j];
    $list[] = ltrim($c, ',');
}

$answer = array();

foreach ($list as $comb)
{

  if (3 == count(explode(',', $comb)))
  {
    $answer[] = $comb;
  }

}

echo '<pre>' . print_r($answer, true);