21,886
社区成员
发帖
与我相关
我的任务
分享
$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
)
先降维,再求笛卡尔积不就行了? 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;
}