表中数组的组合


Combination of array in table

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

一个好的方法是使用array_unique()从数组中删除重复项。然后,每次你使用一个元素,你应该用array_pop()弹出它,这样它就不会再被使用了。

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

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

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