//递归排序法 

function leyangjunRank($base, $temp=null) 

 { 

     static $ret = array(); 

     $len = strlen($base); 

     if($len <= 1) 

     { 

         //echo $temp.$base.'<br/>'; 

         $ret[] = $temp.$base; 

     } 

     else 

     { 

         for($i=0; $i< $len; ++$i) 

         { 

             $had_flag = false; 

             for($j=0; $j<$i; ++$j) 

             { 

                 if($base[$i] == $base[$j]) 

                 { 

                     $had_flag = true; 

                     break; 

                 } 

             } 

             if($had_flag) 

             { 

                 continue; 

             } 

             fsRank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]); 

         } 

     } 

     return $ret; 

 } 

 print_r(leyangjunRank('AABB'));//返回6种组合
返回结果:
Array
(
    [0] => AABB
    [1] => ABAB
    [2] => ABBA
    [3] => BAAB
    [4] => BABA
    [5] => BBAA
)