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

  • A+
所属分类: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

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: