经典的笛卡尔乘积代码,要怎么修改它?
笛卡尔乘积代码:
function Descartes() {
$t = func_get_args();
if(func_num_args() == 1) return call_user_func_array( __FUNCTION__, $t[0] );
$a = array_shift($t);
if(! is_array($a)) $a = array($a);
$a = array_chunk($a, 1);
do {
$r = array();
$b = array_shift($t);
if(! is_array($b)) $b = array($b);
foreach($a as $p)
foreach(array_chunk($b, 1) as $q)
$r[] = array_merge($p, $q);
$a = $r;
}while($t);
return $r;
}
$arr = array(
array('a1','a2'),
'b',
array('c1','c2'),
array('d1','d2','d3'),
array('e1','e2','e3')
//......省略其它元素(也可以是数组),
);
$r = Descartes( $arr );
print_r($r);
?>
//////////////////////////////////////
输出:
Array
(
[0] => Array
(
[0] => a1
[1] => b
[2] => c1
[3] => d1
[4] => e1
)
[1] => Array
(
[0] => a1
[1] => b
[2] => c1
[3] => d1
[4] => e2
)
...。。。
)
////////////////////
现在我只想要3个元素,第一个元素要有a1或a2。那段代码要怎么改?
Array
(
[0] => Array
(
[0] => a1
[1] => b
[2] => c1
)
......
[1] => Array
(
[0] => a2
[1] => c2
[2] => d3
)
......
)
------解决方案--------------------
对于
$arr = array(
array('a1','a2'),
'b',
array('c1','c2'),
array('d1','d2','d3'),
array('e1','e2','e3')
//......省略其它元素(也可以是数组),
);
需先对
$arr = array(
'b',
array('c1','c2'),
array('d1','d2','d3'),
array('e1','e2','e3')
//......省略其它元素(也可以是数组),
);
求 M 取 2 的组合
$c = combination($arr, 2);
然后对组合的结果求笛卡尔积
$r = array();
foreach($c as $v)
$r = array_merge($r, Descartes( array('a1','a2'), $v[0], $v[1] ));
print_r($r);
Array
(
[0] => Array
(
[0] => a1
[1] => d1
[2] => e1
)
[1] => Array
(
[0] => a1
[1] => d1
[2] => e2
)
[2] => Array
(
[0] => a1
[1] => d1
[2] => e3
)
[3] => Array
(
[0] => a1
[1] => d2
[2] => e1
)
[4] => Array
(
[0] => a1
[1] => d2
[2] => e2
)
[5] => Array
(
[0] => a1
[1] => d2
[2] => e3
)
[6] => Array
(
[0] => a1
[1] => d3
[2] => e1
)
[7] => Array
(
[0] => a1
[1] => d3
[2] => e2
)
[8] => Array
(
[0] => a1
[1] => d3
[2] => e3
)
[9] => Array
(
[0] => a2
[1] => d1
[2] => e1
)
[10] => Array
(
[0] => a2
[1] => d1
[2] => e2
)
[11] => Array
(
[0] => a2
[1] => d1
[2] => e3
)
[12] => Array
(
[0] => a2
[1] => d2
[2] => e1
)
[13] => Array
(
[0] => a2
[1] => d2
[2] => e2
)
[14] => Array
(
[0] => a2
[1] => d2
[2] => e3
)
[15] => Array
(
[0] => a2
[1] => d3
[2] => e1
)
[16] => Array
(
[0] => a2
[1] => d3
[2] => e2
)
[17] => Array
(
[0] => a2
[1] => d3
[2] => e3
)
[18] => Array
(
[0] => a1
[1] => c1
[2] => e1
)
[19] => Array
(
[0] => a1
[1] => c1
[2] => e2
)
[20] => Array
(
[0] => a1
[1] => c1
[2] => e3
)
[21] => Array
(
[0] => a1
[1] => c2
[2] => e1
)
[22] => Array
(
[0] => a1
[1] => c2
[2] => e2
)
[23] => Array
(
[0] => a1
[1] => c2
[2] => e3
)
[24] => Array
(
[0] => a2
[1] => c1
[2] => e1
)
[25] => Array
(
[0] => a2
[1] => c1
[2] => e2
)
[26] => Array
(
[0] => a2
[1] => c1
[2] => e3
)
[27] => Array
(
[0] => a2
[1] => c2
[2] => e1
)
[28] => Array
(
[0] => a2
[1] => c2
[2] => e2
)
[29] => Array
(
[0] => a2
[1] => c2
[2] => e3
)
[30] => Array
(
[0] => a1
[1] => c1
[2] => d1
)
[31] => Array
(
[0] => a1
[1] => c1
[2] => d2
)
[32] => Array
(
[0] => a1
[1] => c1
[2] => d3
)
[33] => Array
(
[0] => a1
[1] => c2
[2] => d1
)
[34] => Array
(
[0] => a1
[1] => c2
[2] => d2
)
[35] => Array
(
[0] => a1
[1] => c2
[2] => d3
)
[36] => Array
(
[0] => a2
[1] => c1
[2] => d1
)
[37] => Array
(
[0] => a2
[1] => c1
[2] => d2
)
[38] => Array
(
[0] => a2
[1] => c1
[2] => d3
)
[39] => Array
(
[0] => a2
[1] => c2
[2] => d1
)
[40] => Array
(
[0] => a2
[1] => c2
[2] => d2
)
[41] => Array
(
[0] => a2
[1] => c2
[2] => d3
)
[42] => Array
(
[0] => a1
[1] => b
[2] => e1
)
[43] => Array
(
[0] => a1
[1] => b
[2] => e2
)
[44] => Array
(
[0] => a1
[1] => b
[2] => e3
)
[45] => Array
(
[0] => a2
[1] => b
[2] => e1
)
[46] => Array
(
[0] => a2
[1] => b
[2] => e2
)
[47] => Array
(
[0] => a2
[1] => b
[2] => e3
)
[48] => Array
(
[0] => a1
[1] => b
[2] => d1
)
[49] => Array
(
[0] => a1
[1] => b
[2] => d2
)
[50] => Array
(
[0] => a1
[1] => b
[2] => d3
)
[51] => Array
(
[0] => a2
[1] => b
[2] => d1
)
[52] => Array
(
[0] => a2
[1] => b
[2] => d2
)
[53] => Array
(
[0] => a2
[1] => b
[2] => d3
)
[54] => Array
(
[0] => a1
[1] => b
[2] => c1
)
[55] => Array
(
[0] => a1
[1] => b
[2] => c2
)
[56] => Array
(
[0] => a2
[1] => b
[2] => c1
)
[57] => Array
(
[0] => a2
[1] => b
[2] => c2
)
) <div class="clear"></div>
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号