如何使用数组项找到所有可能的顺序

时间:2012-01-16 09:28:18

标签: php arrays permutation

这是一个数组。

$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
....

我该怎么做?

2 个答案:

答案 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