php求一维数元素组全排列,元素所有排列的方法及数量

西部世界
西部世界
管理员
352
文章
0
粉丝
PHP日常 数组评论阅读模式
<?php
$source = array('pll','我','爱','你','嘿');
sort($source); //保证初始数组是有序的
$last = count($source) - 1; //$source尾部元素下标
$x = $last;
$count = 1; //组合个数统计
echo implode(',', $source), "<br>"; //输出第一种组合
while (true) {
  $y = $x--; //相邻的两个元素
  if ($source[$x] < $source[$y]) { //如果前一个元素的值小于后一个元素的值
    $z = $last;
    while ($source[$x] > $source[$z]) { //从尾部开始,找到第一个大于 $x 元素的值
      $z--;
    }
    /* 交换 $x 和 $z 元素的值 */
    list($source[$x], $source[$z]) = array($source[$z], $source[$x]);
    /* 将 $y 之后的元素全部逆向排列 */
    for ($i = $last; $i > $y; $i--, $y++) {
      list($source[$i], $source[$y]) = array($source[$y], $source[$i]);
    }
    echo implode(',', $source), "<br>"; //输出组合
    $x = $last;
    $count++;
  }
  if ($x == 0) { //全部组合完毕
    break;
  }
}
echo 'Total: ', $count, "\n";
?>

结果 

pll,你,嘿,我,爱
pll,你,嘿,爱,我
pll,你,我,嘿,爱
pll,你,我,爱,嘿
pll,你,爱,嘿,我
pll,你,爱,我,嘿
pll,嘿,你,我,爱
pll,嘿,你,爱,我
pll,嘿,我,你,爱
pll,嘿,我,爱,你
pll,嘿,爱,你,我
pll,嘿,爱,我,你
pll,我,你,嘿,爱
pll,我,你,爱,嘿
pll,我,嘿,你,爱
pll,我,嘿,爱,你
pll,我,爱,你,嘿
pll,我,爱,嘿,你
pll,爱,你,嘿,我
pll,爱,你,我,嘿
pll,爱,嘿,你,我
pll,爱,嘿,我,你
pll,爱,我,你,嘿
pll,爱,我,嘿,你
你,pll,嘿,我,爱
你,pll,嘿,爱,我
你,pll,我,嘿,爱
你,pll,我,爱,嘿
你,pll,爱,嘿,我
你,pll,爱,我,嘿
你,嘿,pll,我,爱
你,嘿,pll,爱,我
你,嘿,我,pll,爱
你,嘿,我,爱,pll
你,嘿,爱,pll,我
你,嘿,爱,我,pll
你,我,pll,嘿,爱
你,我,pll,爱,嘿
你,我,嘿,pll,爱
你,我,嘿,爱,pll
你,我,爱,pll,嘿
你,我,爱,嘿,pll
你,爱,pll,嘿,我
你,爱,pll,我,嘿
你,爱,嘿,pll,我
你,爱,嘿,我,pll
你,爱,我,pll,嘿
你,爱,我,嘿,pll
嘿,pll,你,我,爱
嘿,pll,你,爱,我
嘿,pll,我,你,爱
嘿,pll,我,爱,你
嘿,pll,爱,你,我
嘿,pll,爱,我,你
嘿,你,pll,我,爱
嘿,你,pll,爱,我
嘿,你,我,pll,爱
嘿,你,我,爱,pll
嘿,你,爱,pll,我
嘿,你,爱,我,pll
嘿,我,pll,你,爱
嘿,我,pll,爱,你
嘿,我,你,pll,爱
嘿,我,你,爱,pll
嘿,我,爱,pll,你
嘿,我,爱,你,pll
嘿,爱,pll,你,我
嘿,爱,pll,我,你
嘿,爱,你,pll,我
嘿,爱,你,我,pll
嘿,爱,我,pll,你
嘿,爱,我,你,pll
我,pll,你,嘿,爱
我,pll,你,爱,嘿
我,pll,嘿,你,爱
我,pll,嘿,爱,你
我,pll,爱,你,嘿
我,pll,爱,嘿,你
我,你,pll,嘿,爱
我,你,pll,爱,嘿
我,你,嘿,pll,爱
我,你,嘿,爱,pll
我,你,爱,pll,嘿
我,你,爱,嘿,pll
我,嘿,pll,你,爱
我,嘿,pll,爱,你
我,嘿,你,pll,爱
我,嘿,你,爱,pll
我,嘿,爱,pll,你
我,嘿,爱,你,pll
我,爱,pll,你,嘿
我,爱,pll,嘿,你
我,爱,你,pll,嘿
我,爱,你,嘿,pll
我,爱,嘿,pll,你
我,爱,嘿,你,pll
爱,pll,你,嘿,我
爱,pll,你,我,嘿
爱,pll,嘿,你,我
爱,pll,嘿,我,你
爱,pll,我,你,嘿
爱,pll,我,嘿,你
爱,你,pll,嘿,我
爱,你,pll,我,嘿
爱,你,嘿,pll,我
爱,你,嘿,我,pll
爱,你,我,pll,嘿
爱,你,我,嘿,pll
爱,嘿,pll,你,我
爱,嘿,pll,我,你
爱,嘿,你,pll,我
爱,嘿,你,我,pll
爱,嘿,我,pll,你
爱,嘿,我,你,pll
爱,我,pll,你,嘿
爱,我,pll,嘿,你
爱,我,你,pll,嘿
爱,我,你,嘿,pll
爱,我,嘿,pll,你
爱,我,嘿,你,pll
Total: 120

文章末尾固定信息

 
西部世界
  • 本文由 西部世界 发表于2021年2月4日 22:23:02
  • 转载请务必保留本文链接:https://www.cnhawkit.com/1429.html
  • php求一维数组全排列
  • 元素所有排列的方法及数量
匿名

发表评论

匿名网友

拖动滑块以完成验证