2012-05-31 90 views
19

可能重複:
algorithm that will take numbers or words and find all possible combinations
Combinations, Dispositions and Permutations in PHPPHP:如何獲得一維數組的所有可能的組合?

我讀過/試過所以建議答案,這其中沒有一個解決問題的很多

$array = array('Alpha', 'Beta', 'Gamma'); 

如何獲得所有可能的組合?

預期輸出:

array('Alpha', 
     'Beta', 
     'Gamma', 
     'Alpha Beta', 
     'Alpha Gamma', 
     'Beta Alpha', 
     'Beta Gamma', 
     'Gamma Alpha', 
     'Gamma Beta', 
     'Alpha Beta Gamma', 
     'Alpha Gamma Beta', 
     'Beta Alpha Gamma', 
     'Beta Gamma Alpha', 
     'Gamma Alpha Beta', 
     'Gamma Beta Alpha') 

注:我在尋找答案應該包括所有組合和各種不同的安排。例如:'Alpha Beta''Beta Alpha'是2個不同的字符串,它們都應該在輸出數組中。

在此先感謝

+2

@lanzz幾乎所有的東西! – evilReiko

+0

@Juhana那個問題/答案包括重複的字符串,比如'Alpha Alpha',我不想要 – evilReiko

+0

@Juhana OP也想要單個單詞 – Bono

回答

36

我相信你的教授將這種解決方案更幸福:

<?php 

$array = array('Alpha', 'Beta', 'Gamma', 'Sigma'); 

function depth_picker($arr, $temp_string, &$collect) { 
    if ($temp_string != "") 
     $collect []= $temp_string; 

    for ($i=0; $i<sizeof($arr);$i++) { 
     $arrcopy = $arr; 
     $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element 
     if (sizeof($arrcopy) > 0) { 
      depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect); 
     } else { 
      $collect []= $temp_string. " " . $elem[0]; 
     } 
    } 
} 

$collect = array(); 
depth_picker($array, "", $collect); 
print_r($collect); 

?> 

這解決了它:

Array 
(
    [0] => Alpha 
    [1] => Alpha Beta 
    [2] => Alpha Beta Gamma 
    [3] => Alpha Beta Gamma Sigma 
    [4] => Alpha Beta Sigma 
    [5] => Alpha Beta Sigma Gamma 
    [6] => Alpha Gamma 
    [7] => Alpha Gamma Beta 
    [8] => Alpha Gamma Beta Sigma 
    [9] => Alpha Gamma Sigma 
    [10] => Alpha Gamma Sigma Beta 
    [11] => Alpha Sigma 
    [12] => Alpha Sigma Beta 
    [13] => Alpha Sigma Beta Gamma 
    [14] => Alpha Sigma Gamma 
    [15] => Alpha Sigma Gamma Beta 
    [16] => Beta 
    [17] => Beta Alpha 
    [18] => Beta Alpha Gamma 
    [19] => Beta Alpha Gamma Sigma 
    [20] => Beta Alpha Sigma 
    [21] => Beta Alpha Sigma Gamma 
    [22] => Beta Gamma 
    [23] => Beta Gamma Alpha 
    [24] => Beta Gamma Alpha Sigma 
    [25] => Beta Gamma Sigma 
    [26] => Beta Gamma Sigma Alpha 
    [27] => Beta Sigma 
    [28] => Beta Sigma Alpha 
    [29] => Beta Sigma Alpha Gamma 
    [30] => Beta Sigma Gamma 
    [31] => Beta Sigma Gamma Alpha 
    [32] => Gamma 
    [33] => Gamma Alpha 
    [34] => Gamma Alpha Beta 
    [35] => Gamma Alpha Beta Sigma 
    [36] => Gamma Alpha Sigma 
    [37] => Gamma Alpha Sigma Beta 
    [38] => Gamma Beta 
    [39] => Gamma Beta Alpha 
    [40] => Gamma Beta Alpha Sigma 
    [41] => Gamma Beta Sigma 
    [42] => Gamma Beta Sigma Alpha 
    [43] => Gamma Sigma 
    [44] => Gamma Sigma Alpha 
    [45] => Gamma Sigma Alpha Beta 
    [46] => Gamma Sigma Beta 
    [47] => Gamma Sigma Beta Alpha 
    [48] => Sigma 
    [49] => Sigma Alpha 
    [50] => Sigma Alpha Beta 
    [51] => Sigma Alpha Beta Gamma 
    [52] => Sigma Alpha Gamma 
    [53] => Sigma Alpha Gamma Beta 
    [54] => Sigma Beta 
    [55] => Sigma Beta Alpha 
    [56] => Sigma Beta Alpha Gamma 
    [57] => Sigma Beta Gamma 
    [58] => Sigma Beta Gamma Alpha 
    [59] => Sigma Gamma 
    [60] => Sigma Gamma Alpha 
    [61] => Sigma Gamma Alpha Beta 
    [62] => Sigma Gamma Beta 
    [63] => Sigma Gamma Beta Alpha 
) 
+5

我知道我的問題聽起來像是作業,但事實並非如此!大聲笑!我知道解決方案隱藏在遞歸中,但我並不擅長。完美答案,值得一枚獎牌! – evilReiko

+0

謝謝broseph對我來說意義重大。我可以問一下,如果沒有做功課,它會用到什麼:)? – abcde123483

+1

此代碼是改進我的網站搜索引擎的關鍵,因此它可以爲用戶建議「熟悉的」關鍵字 – evilReiko