1. public static function getPermutation(array $orignal = [])
  2. {
  3. // 排除非数组的参数
  4. if (! is_array($orignal)) {
  5. return [];
  6. }
  7. // 排除空数组
  8. if (empty($orignal)) {
  9. return [];
  10. }
  11. // 排除只有一个元素的数组
  12. if (count($orignal) < 2) {
  13. // 返回的目标数组
  14. $targetTmp = array_shift($orignal);
  15. // 返回结果集
  16. // 返回结果集
  17. return array_map(function ($v) {
  18. return [$v];
  19. }, $targetTmp);
  20. }
  21. // 构建目标数组
  22. $target = array_shift($orignal);
  23. // 目标数组第一个元素格式化为数组
  24. $target = is_array($target) ? $target : [];
  25. // 下一个需要处理的数组
  26. $tmp = array_shift($orignal);
  27. // 非正常数据标识
  28. //$invalideParam = false;
  29. // 数组且不为空
  30. while (is_array($tmp) && ! empty($tmp)) {
  31. // // 验证参数是否是一维数组
  32. // if (count($tmp) != count($tmp, COUNT_RECURSIVE)) {
  33. // $invalideParam = true;
  34. // break;
  35. // }
  36. /**
  37. * 原始数组的循环
  38. * array(
  39. * 0 =>1,
  40. * 1 =>2,
  41. * 2 =>3,
  42. * );.
  43. */
  44. // 目标数组的临时变量
  45. $targetTmp = [];
  46. foreach ($target as $value) {
  47. foreach ($tmp as $v) {
  48. // 临时数组变量
  49. $targetTmp[] = array_merge([$value], [$v]);
  50. }
  51. }
  52. // 原始数组的替换
  53. $target = $targetTmp;
  54. // 移动数组的下一个元素
  55. $tmp = array_shift($orignal);
  56. }
  57. // // 存在非一维数组项
  58. // if ($invalideParam) {
  59. // return [];
  60. // }
  61. // 返回结果集
  62. return is_array($target) ? $target : [];
  63. }