例如,假设['a', 'b']
(作为生成器)和2作为长度
该函数将输出一个生成器,该生成器将产生:
'',
'a',
'b',
'ab'
'ba'
'aa'
'bb'
或给定['a']
且长度为3:
'',
'a',
'aa',
'aaa',
您可以想象,如果添加更多字母或增加长度,该集合会变得更大,它应该列出给定字符的所有排列,直到长度为止
答案 0 :(得分:3)
这是一个不言自明的解决方案。
//Returns all permuations of a certain length.
function perm($ls, $len)
{
if($len <= 0)
yield '';
else
foreach ($ls as $x)
foreach(perm($ls, $len-1) as $i)
yield $x.$i;
}
//Returns all permuations of all lengths less or equal to the supplied integer.
function all_perm($ls, $len) {
//$ls = iterator_to_array($ls);
for($x=$len; $x>=0; $x--)
foreach(perm($ls, $len-$x) as $string)
yield $string;
}
只需使用您的数组和最大长度调用 all_perm 。如果绝对必须将参数用作生成器,则取消注释 $ ls = iterator_to_array($ ls); 。