2012-05-31 113 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