• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

经典的笛卡尔乘积代码,要如何修改它

php 搞代码 3年前 (2022-01-23) 49次浏览 已收录 0个评论

经典的笛卡尔乘积代码,要怎么修改它?
笛卡尔乘积代码:

<?PHP

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;
} *本文来源gaodai#ma#com搞@代~码^网+搞代gaodaima码

$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);

PHP code

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 )) 


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:经典的笛卡尔乘积代码,要如何修改它

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址