PHP输出多个元素的排列或组合的方法

  1. <?php
  2. $arr=array('a','b','c','d');
  3. $result=array();
  4. $t= getCombinationToString($arr, 1);
  5. print_r($t);
  6. $t= getCombinationToString($arr, 2);
  7. $t2= getunique($t);
  8. print_r($t2);
  9. $t= getCombinationToString($arr, 3);
  10. $t2= getunique($t);
  11. print_r($t2);
  12. $t= getCombinationToString($arr, 4);
  13. $t2= getunique($t);
  14. print_r($t2);
  15. functiongetunique($t){
  16. $t2=array();
  17. //print_r($t);
  18. for($i=0;$i<count($t);$i++){
  19. $count_list=array_count_values($t[$i]);
  20. $flag= 1;
  21. <a href="/tags.php/foreach/" target="_blank">foreach</a>($count_listas$ck=>$cv){
  22. if($cv>1){
  23. $flag= 0;
  24. break;
  25. }
  26. }
  27. if($flag){
  28. sort($t[$i]);
  29. $flag2= 1;
  30. if($t2){
  31. foreach($t2as$t2k=>$t2v){
  32. if($t[$i]==$t2v){
  33. $flag2= 0;
  34. break;
  35. }
  36. }
  37. }
  38. if($flag2){
  39. $t2[] =$t[$i];
  40. }
  41. }
  42. }
  43. return$t2;
  44. }
  45. functiongetCombinationToString($arr,$m) {
  46. if($m==1) {
  47. return$arr;
  48. }
  49. $result=array();
  50. $tmpArr=$arr;
  51. unset($tmpArr[0]);
  52. for($i=0;$i<count($arr);$i++) {
  53. $s=$arr[$i];
  54. $ret= getCombinationToString(array_values($tmpArr), ($m-1),$result);
  55. foreach($retas$row) {
  56. //$result[] = $s . $row;
  57. $temp=array();
  58. $temp[] =$s;
  59. if(is_array($row)){
  60. $temp=array_merge($temp,$row);
  61. }else{
  62. $temp[] =$row;
  63. }
  64. sort($temp);
  65. $result[] =$temp;
  66. } //phpfensi.com
  67. }
  68. return$result;
  69. }
  70. ?>