PHP:如何获得一维数组的所有可能的组合?
可能重复:
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个不同的字符串,它们都应该在输出数组中。
在此先感谢
我相信你的教授将这种解决方案更幸福:
<?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
)
我知道我的问题听起来像是作业,但事实并非如此!大声笑!我知道解决方案隐藏在递归中,但我并不擅长。完美答案,值得一枚奖牌! – evilReiko
谢谢broseph对我来说意义重大。我可以问一下,如果没有做功课,它会用到什么:)? – abcde123483
此代码是改进我的网站搜索引擎的关键,因此它可以为用户建议“熟悉的”关键字 – evilReiko
@lanzz几乎所有的东西! – evilReiko
@Juhana那个问题/答案包括重复的字符串,比如'Alpha Alpha',我不想要 – evilReiko
@Juhana OP也想要单个单词 – Bono