0

我如何生成给定数量的数字并使用特定数字的所有可能数量?

所以基本上,我想要一个 6 位数字,例如只使用数字 ['1','2','3']。我尝试了一些递归方法,但是,由于我的其他并发症,我无法让它正常工作,即添加“|”分隔符 在每 2 位数字之间。所以列表会是这样的:

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

等等。如果有人能指出我正确的方向,将不胜感激。将每种组合转储到我的 MySQL 数据库中的方法也很棒。

4

2 回答 2

2

这是您的问题的一个更新很多的答案(最初从这个答案更新] 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)。最后,我使用默认参数值来使调用这个函数更清晰。

于 2013-03-29T17:21:14.157 回答
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);
于 2013-03-29T17:15:15.100 回答