我想要一种方法来获得给定数组长度的所有给定数字的所有组合。 在我的项目中,数组大小通常为7.因此,我编写了一个像这样的测试代码,以查看是否可以获得所有需要的组合。最重要的部分是每个结果数组必须是唯一的,最大的数组大小必须是7从给定数量的元素获得阵列的所有独特组合
<?php
$numbers = [1, 2, 3, 4, 5, 6, 7];
$arraysize = 7;
$subset = [];
$count = count($numbers);
for ($i = 0; $i < $count; $i++) {
$subset[] = $numbers[$i];
}
for ($i=0; $i < $count; $i++) {
for ($j=$i; $j < $count; $j++) {
$subset[] = $numbers[$i] . $numbers[$j];
}
}
for ($i=0; $i < $count; $i++) {
for ($j=$i; $j < $count; $j++) {
for ($k=$j; $k < $count; $k++) {
$subset[] = $numbers[$i] . $numbers[$j] . $numbers[$k];
}
}
}
for ($i=0; $i < $count; $i++) {
for ($j=$i; $j < $count; $j++) {
for ($k=$j; $k < $count; $k++) {
for ($l=$k; $l < $count; $l++) {
$subset[] = $numbers[$i] . $numbers[$j] . $numbers[$k] . $numbers[$l];
}
}
}
}
for ($i=0; $i < $count; $i++) {
for ($j=$i; $j < $count; $j++) {
for ($k=$j; $k < $count; $k++) {
for ($l=$k; $l < $count; $l++) {
for ($m=$l; $m < $count; $m++) {
$subset[] = $numbers[$i] . $numbers[$j] . $numbers[$k] . $numbers[$l] . $numbers[$m];
}
}
}
}
}
for ($i=0; $i < $count; $i++) {
for ($j=$i; $j < $count; $j++) {
for ($k=$j; $k < $count; $k++) {
for ($l=$k; $l < $count; $l++) {
for ($m=$l; $m < $count; $m++) {
for ($n=$m; $n < $count; $n++) {
$subset[] = $numbers[$i] . $numbers[$j] . $numbers[$k] . $numbers[$l] . $numbers[$m] . $numbers[$n];
}
}
}
}
}
}
for ($i=0; $i < $count; $i++) {
for ($j=$i; $j < $count; $j++) {
for ($k=$j; $k < $count; $k++) {
for ($l=$k; $l < $count; $l++) {
for ($m=$l; $m < $count; $m++) {
for ($n=$m; $n < $count; $n++) {
for ($o=$n; $o < $count; $o++) {
$subset[] = $numbers[$i] . $numbers[$j] . $numbers[$k] . $numbers[$l] . $numbers[$m] . $numbers[$n] . $numbers[$o];
}
}
}
}
}
}
}
echo "<pre>";
print_r($subset);
echo "</pre>";
?>
当我运行这段代码,我得到了类似的组合,我想(我做组合为字符串清楚地看到结果,但通常每个结果项在$subset
数组必须是数组) 使用此代码,我可以得到所有独特的组合。
但正如你所看到的,这段代码很难看。我试图让这个递归函数,但我失败了。任何人都可以指出我正确的方向来获得像这样的完全相同的结果吗? (在$subset
阵列的每个项目通常必须是包含数字数组)
再次编辑评论。我错误地低估了,只有当我不能恢复它时才注意到它。我得到:“您最后一个小时前对此答案投了1票。您的投票现在被锁定,除非此答案被编辑。“无论如何,我不明白这些必要条件,因为实现给出了不同的结果。 – 2014-10-23 16:35:20
是的,它给出了不同的结果,因为我希望每个组合都是唯一的。使用这个函数,我可以获得所有可能的算法。 – Valour 2014-10-24 05:44:34