表中数组的组合[重复]

Posted

技术标签:

【中文标题】表中数组的组合[重复]【英文标题】:Combination of array in table [duplicate] 【发布时间】:2013-02-21 04:28:40 【问题描述】:

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

【问题讨论】:

你能给我们展示一些组合的例子吗? 1,2,3 1,4,3 1,5,3 1,6,3 1,7,3 等 你的问题不是一个好问题。您的问题没有显示出任何努力来寻找答案,您尝试了什么,或者您想要实现什么(除了做作业,我猜)。查看建议的可能重复项,我确定这些重复项可以解决您的确切问题。如果不是,请解释原因。 感谢您的快速帮助,我在这里找到了解决方案:***.com/questions/127704/… 特别是 Akseli Palén 的评论,他指的是 gist.github.com/doph/3118596 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

借用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);

【讨论】:

以上是关于表中数组的组合[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将多个数组合并为一个数组而不重复[重复]

Javascript创建一个具有唯一值组合的数组[重复]

组合两个数组以形成每个项目的一对[重复]

PHP数组内容不重复组合排列算法

在PHP中查找数组元素的所有可能的唯一组合[重复]

如何使用Javascript从特定的单个数组中查找所有不重复的组合