这是一个数组。
$item = array('A', 'B', 'C', 'D');
我想在此数组中列出所有可能的订单,如:
一个
A,B
A,B,C
A,B,C,d
A,C
A,C,d
A,C,B
...
B,A
B,A,C
....
我该怎么做?
答案 0 :(得分:1)
您可以使用此递归函数:
function recursive_permutations($items,$perms = array( ))
{
static $list;
if (empty($items)) {
$list[] = join(',', $perms);
} else {
for ($i = count($items)-1;$i>=0;--$i) {
$newitems = $items;
$newperms = $perms;
list($foo) = array_splice($newitems, $i, 1);
array_unshift($newperms, $foo);
recursive_permutations($newitems, $newperms);
};
return $list;
};
}
$perms = recursive_permutations(array('A', 'B', 'C', 'D'));
echo '<pre>' . print_r($perms, true) . '</pre>';
答案 1 :(得分:1)
您想知道的permutations可以通过this algorithm完成,然后在子集的循环中应用。
使用&lt; 1&lt; 2初始化第一个排列...
虽然存在移动整数
找到最大的移动整数k
交换k和正在查看的相邻整数
反转大于k的所有整数的方向
有关详细信息,请参阅this question