php实现的全排列,需要用到递归思想

<?php
/**
 * [perm 全排列 在arr选出num个元素的所有集合]
 * @param  [type] $arr [description]
 * @param  [type] $len [description]
 * @param  [type] $num [description]
 * @return [type]      [description]
 */
function perm($arr,$k,$n){
    static $reArr = array();
    static $count = 0;
    if($k == 1){
        $reArr[] = $arr;
    }else{
        for($i=$n-$k;$i<$n;$i++){
            swap($arr[$i],$arr[$n-$k]);
            perm($arr,$k-1,$n);
            swap($arr[$i],$arr[$n-$k]);
        }
    }
    return $reArr;
}
function swap(&$a,&$b){
    $temp = $a;
    $temp2 = $b;
    $b = $temp;
    $a = $temp2;
}
var_dump( perm(array('a','b','c','d','e'),5,5) );
?>

代码演示地址