如何生成多个数组所有的排列组合

飞天猪猪侠 2017-03-14 06:36:08
A=>array(1,2,3,4,5);
B=>array('a','b','c','d');
C=>array('x','y','z');
……
N=>array('@','$','%');

要求可以生成
1ax@
……
5dz%
所有的排列组合,数组个数不定,数组里面的值也不定。
求最好的算法,谢谢!
...全文
823 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天猪猪侠 2017-03-14
  • 打赏
  • 举报
回复
版主一出手,就知有没有!
xuzuning 2017-03-14
  • 打赏
  • 举报
回复
降维也是基础算法
$a = array(1,2,3=>array(5,6=>array(7,8=>array(9,0))),4);
print_r(dimensionality_reduction($a));

function dimensionality_reduction($ar) {
  if(! is_array($ar)) return array($ar);
  $r = array();
  foreach($ar as $v) $r = array_merge($r, dimensionality_reduction($v));
  return $r;
} 
Array
(
    [0] => 1
    [1] => 2
    [2] => 5
    [3] => 7
    [4] => 9
    [5] => 0
    [6] => 4
)

先降维,再求笛卡尔积不就行了?
飞天猪猪侠 2017-03-14
  • 打赏
  • 举报
回复
A=>array(1,2,3=>array(5,6=>array(7,8=>array(9,0))),4); B=>array('a','b','c','d'=>array('e','f')); C=>array('x','y','z'); …… N=>array('@','$','%'); ======================== 1ax@ .... 5ax@ .... 7ax@ .... 9ax@ .... 9fz$ .... 4fz%
引用 5 楼 xuzuning 的回复:
你至少得给出测试数据和期望的结果
xuzuning 2017-03-14
  • 打赏
  • 举报
回复
你至少得给出测试数据和期望的结果
飞天猪猪侠 2017-03-14
  • 打赏
  • 举报
回复
现在一想到算法就头大,有劳版主
引用 3 楼 xuzuning 的回复:
你做做看
xuzuning 2017-03-14
  • 打赏
  • 举报
回复
你做做看
飞天猪猪侠 2017-03-14
  • 打赏
  • 举报
回复
如果A/B/C是多维数组呢?
引用 1 楼 xuzuning 的回复:
笛卡尔积,数据结构 永远都是最基本的知识
  function Descartes($d) {
	if(func_num_args() > 1) $d = func_get_args();
	$r = array_pop($d);
	while($d) {
		$t = array();
		$s = array_pop($d);
		if(! is_array($s)) $s = array($s);
		foreach($s as $x) {
			foreach($r as $y) $t[] = array_merge(array($x), is_array($y) ? $y : array($y));
		}
		$r = $t;
	}
	return $r;
  }
xuzuning 2017-03-14
  • 打赏
  • 举报
回复
笛卡尔积,数据结构 永远都是最基本的知识
  function Descartes($d) {
	if(func_num_args() > 1) $d = func_get_args();
	$r = array_pop($d);
	while($d) {
		$t = array();
		$s = array_pop($d);
		if(! is_array($s)) $s = array($s);
		foreach($s as $x) {
			foreach($r as $y) $t[] = array_merge(array($x), is_array($y) ? $y : array($y));
		}
		$r = $t;
	}
	return $r;
  }

21,892

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧