【问题标题】:How to find all possible order with array item如何使用数组项查找所有可能的顺序
【发布时间】:2012-01-16 09:28:17
【问题描述】:

这是一个数组。

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

我该怎么做?

【问题讨论】:

  • 这是作业吗,如果是请加homework标签。
  • 我认为你应该自己尝试...尝试谷歌搜索递归和排列
  • 在这个问题中php 没有什么特别之处。它是一个通用算法。你只需要知道算法。如果您向我们展示您到目前为止编写的代码,您可以说“in php”IMO。
  • Google 上的第一个结果:hashbangcode.com/blog/…
  • 我不明白为什么这个问题有赞成票......

标签: php arrays permutation


【解决方案1】:

您想知道的permutations 可以通过this algorithm 完成并在子集的循环中应用。

虽然存在移动整数

找到最大的移动整数k

交换 k 和它正在查看的相邻整数

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

更多信息请参考this question

【讨论】:

    【解决方案2】:

    你可以使用这个递归函数:

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

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多