如何找出数组项的所有可能排序

4

这是一个数组。

$item = array('A', 'B', 'C', 'D');

我想要列出这个数组中所有可能的订单,例如:
A
A,B
A,B,C
A,B,C,D
A,C
A,C,D
A,C,B
...
B,A
B,A,C
....
我该如何做到这一点?

1
如果这是一份作业,请添加“homework”标签。 - home
我认为你应该自己尝试一下...试着搜索递归和排列组合。 - de3
在这个问题中,php 没有什么特别的。它是一个通用算法。你只需要知道这个算法。如果你展示出你到目前为止编写的代码,你可以说 "在 php 中"。 - footy
1
谷歌搜索的第一个结果:http://www.hashbangcode.com/blog/getting-all-permutations-array-php-74.html - Quasdunk
2
我不明白为什么这个问题会有赞成票... - footy
可能是排列 - 所有可能的数字集合的重复问题。 - zaf
2个回答

2
您想了解的排列可以通过这个算法实现,并在子集上应用循环。

使用<1 <2 ...初始化第一个排列

当存在可移动整数时:

找到最大的可移动整数k

交换k和它所看到的相邻整数

反转所有比k大的整数的方向

更多信息请参考这个问题

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>';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接