欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-17 16:42:12
...
经典的笛卡尔乘积代码,要怎么修改它?
笛卡尔乘积代码:


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

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频