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

标签 php math combinations

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

例如,字符集“abc”和长度 2 应允许 9 (3 ^ 2) 个唯一组合:

aa, ab, 交流电, 巴, BB, 公元前, 加州, CB, 抄送

(手动构建的列表)

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

最佳答案

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

$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

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

我可以想象这也应该适用于获取输出字符串的每个位置的模数。

关于php - 基于字符集的固定长度的所有字符串组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7863781/

相关文章:

算法问题 : letter combinations

php - Mysql子查询7天和30天的平均值

php - 如何在 jQuery 警报中显示 PHP 数组?

php - 我如何在 PHP 中找到所有加起来等于给定总和的 N 个单位数、非重复数字集?

algorithm - 简化表达式 k/m%n

python - 通过交换特定元素生成列表的排列

c++ - 在 C++ 中使用暴力生成所有组合

php - Laravel 5.2 - 使用 Auth::check() 在 MIddleware 中不起作用

javascript - 如何使用 Javascript 在不同月份的日历中突出显示多个日期?

ios - 如何使用 UIBezierPath 绘制此复选框图标?