我如何生成给定数量的数字并使用特定数字的所有可能数量?
所以基本上,我想要一个 6 位数字,例如只使用数字 ['1','2','3']。我尝试了一些递归方法,但是,由于我的其他并发症,我无法让它正常工作,即添加“|”分隔符 在每 2 位数字之间。所以列表会是这样的:
11|11|11
11|11|12
11|11|13
11|11|21
11|11|22
11|11|23
等等。如果有人能指出我正确的方向,将不胜感激。将每种组合转储到我的 MySQL 数据库中的方法也很棒。
我如何生成给定数量的数字并使用特定数字的所有可能数量?
所以基本上,我想要一个 6 位数字,例如只使用数字 ['1','2','3']。我尝试了一些递归方法,但是,由于我的其他并发症,我无法让它正常工作,即添加“|”分隔符 在每 2 位数字之间。所以列表会是这样的:
11|11|11
11|11|12
11|11|13
11|11|21
11|11|22
11|11|23
等等。如果有人能指出我正确的方向,将不胜感激。将每种组合转储到我的 MySQL 数据库中的方法也很棒。
这是您的问题的一个更新很多的答案(最初从这个答案更新] 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
)。最后,我使用默认参数值来使调用这个函数更清晰。
你的意思是这样的?
$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);