我想要一種方法來獲得給定數組長度的所有給定數字的所有組合。 在我的項目中,數組大小通常爲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