基于字符集的固定长度的所有字符串组合


all string combinations in a fixed length, based on a charset

我希望创建一个函数,该函数将返回给定字符串长度内的每个可能的字符串,使用字符集。

作为一个例子,字符集"abc"和长度为2应该允许9(3 ^ 2)个唯一的组合:

aa,ab,交流,英国航空公司bb,公元前钙、cb,cc

(手动构造的列表)

可以使用什么方法来创建这样的函数?

一如既往,有多种方法可以解决您所要求的问题,这只是一种方法,在输出字符串中每个字符使用一个计数器:

$c = "abc"; // charset
$l = 2; // string length
for($t='',$cl=strlen($c),$s=array_fill(0,$l,0),$i=pow($cl,$l);$a=0,$i--;) {
    for($t&&$t.=', ';$a<$l;$t.=$c[$s[$a++]]);
    for(;$a--&&++$s[$a]==$cl;$s[$a]=0);
};
echo $t; // the string you asked for.

aa、ab、ac、ba、bb、bc、ca、cb、cc

一个主循环,一个用于构建字符串的循环和一个用于计数的循环。

我可以想象这应该与每个输出字符串位置的模量一起工作。

您已经做了这样做,从您的示例解决方案中我们可以清楚地看到:

aa、ab、ac、ba、bb、bc、ca、cb、cc

你是怎么想出这个解决方案的?你必须记住一些事情:

  1. 我应该从字符集开始的字符是什么?

  2. 当我正在构建输出字符串时,下一个字符是什么?

  3. 我可以从字符集中选择多少字符?

  4. 当我从字符集中选择了我允许的所有字符时,我必须做什么?

  5. 我已经耗尽了字符集相对于字符我可以开始吗?

你能把这个翻译成代码吗?还是这个回答太做作了?