2013-03-29 73 views
0

如何生成給定數量的數字和使用特定數字的每個可能數字?所以基本上,我想有一個6位數的數字,例如只使用數字['1','2','3']。我已經嘗試了遞歸的一些方法,但是,由於我的其他併發症,我添加了「|」分隔符,我無法正確工作。在每兩位數之間。因此,該列表會像這樣:如果有人能在正確的方向指向我PHP列出所有可能的具有特定數字的6位數字

11|11|11 
11|11|12 
11|11|13 
11|11|21 
11|11|22 
11|11|23 

等。 將不勝感激。 也是一種將每種組合轉儲到我的MySQL數據庫的方法。

+0

http://stackoverflow.com/questions/5506888/permutations-all-possible-sets-of-numbers –

+0

忘記分隔符,你可以隨時添加它們。只需要選擇一個隨機數(1到3之間)6次,並將它們連接在一起。檢查你的數據庫表,看看它是否存在,如果沒有添加它。運行它一堆。最終你會得到他們。 –

+0

此外,管道分隔符只是象徵性的,它對排列算法沒有任何重要性,所以不要認爲它是一個複雜的' –

回答

1

這裏是一個非常更新答案(最初從這個答案更新] 1)你的問題:

function findPermutations($arr, $arrLen, $size, $perArr = array(), $pos = 0, &$found = array()) { 
    if ($size==$pos) { //if $pos reach $size then we have found one permutation 
     $found[] = vsprintf("%s%s|%s%s|%s%s", $perArr); 
     return; 
    } 
    for ($i=0; $i<$arrLen; $i++) { 

     $perArr[$pos] = $arr[$i]; //put i'th char in current position 
     //The recursive call that move to next position with $pos+1 
     findPermutations($arr, $arrLen, $size, $perArr, $pos+1, $found); 
    } 
    return $found; 
} 

$permutations = array(); 
$letters = array('1','2','3'); 
$max_length = 6; 

$permutations = findPermutations($letters, count($letters), $max_length); 

for($i = 0; $i < count($permutations); $i++) { 
    print ($permutations[$i].'<br/>'); 
} 

下面是我在做什麼。我通過引用傳入一個名爲$permutations的空數組,並且當我找到新的排列組合時,我將它們附加到它。當功能findPermutations()完成後,我最終得到一個所有排列的數組,我可以迭代或插入。爲了獲得我使用的格式,vsprintf,它允許我傳遞一組數據並應用格式(在這種情況下爲%s%s|%s%s|%s%s)。最後,我使用默認參數值來調用這個函數更清晰。

+0

你可以在這裏測試這個:http://phpcodepad.com/ –

+0

謝謝你,這是完美的。但是 - 請問如何將每個2位數與「|」分開?對不起,我是PHP新手。 – Engine

+0

'return'語句上方的行用於打印每個排列,您可以將它們更改爲'print $ perArr [0]。$ perArr [1]。'|'。$ perArr [2]。$ perArr [ 3]。'|'。$ perArr [4]。$ perArr [5]'或者你可以在其中添加你的MySQL INSERT命令(如果你這樣做,我會將它重命名爲storePermutation) –

0

你的意思是這樣的?

$letters='123'; // add other numbers 

for($i=0;$i<3;$i++) { //generate 3 pairs 
    $pairs[]=$letters[rand(0,2)] . $letters[rand(0,2)]; 
} 
//then join them together 
$finalstring=implode('-',$pairs); 
相關問題