2013-03-06 61 views
3

我有10個數字的數組。 我想從可用的10中選擇三個數字的所有組合。但是,順序不相關。那就是我不想以不同的順序組合相同的數字(1,2,3產生後2,3,1不應該出現)。此外,數字不應該在組合內重複(即不是1,1,1)。 我知道如何用foreach創建表格,但我一直在如何生成可能的組合。 感謝您的幫助!表中數組的組合

+0

你能告訴我們組合的一些例子嗎? – 2013-03-06 11:43:10

+0

1,2,3 1,4,3 1,5,3 1,6,3 1,7,3 etc – Duncan 2013-03-06 11:44:52

+0

你的問題不是一個好問題。你的問題沒有顯示任何努力找到答案,你已經嘗試過什麼,或者你想要實現什麼(除了做功課,我的猜測)。 看看建議可能的重複,我確定處理您的確切問題。如果沒有,請解釋原因。 – ExternalUse 2013-03-06 11:51:55

回答

0

一個好方法是使用array_unique()從陣列中刪除重複項。然後,每次使用元素時,都應該使用array_pop()將其彈出,以便它不會再次使用。

0

數字不能重複,那麼這是否意味着1,2,1也是不允許的?如果是這樣,作爲第一步,刪除給定集合中的所有重複數字,正如死鎖所暗示的那樣。然後使用算法來查找組合。其他用戶提出的「重複」問題涵蓋了許多此類算法。

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