求笛卡尔积的php代码

来源:互联网 发布:淘宝达人2017还赚钱吗 编辑:程序博客网 时间:2024/05/19 13:14

笛卡尔(Descartes)乘积又叫直积。设A、B是任意两个集合,在集合A中任意取一个元素x,在集合B中任意取一个元素y,组成一个有序对(x,y),把这样的有序对作为新的元素,他们的全体组成的集合称为集合A和集合B的直积,记为A×B,即A×B={(x,y)|x∈A且y∈B}。

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),  //......省略其它元素(也可以是数组),); $r = Descartes( $arr );

结果

Array(    [0] => Array        (            [0] => a1            [1] => b            [2] => c1            [3] => d1        )    [1] => Array        (            [0] => a1            [1] => b            [2] => c1            [3] => d2        )    [2] => Array        (            [0] => a1            [1] => b            [2] => c1            [3] => d3        )    [3] => Array        (            [0] => a1            [1] => b            [2] => c2            [3] => d1        )    [4] => Array        (            [0] => a1            [1] => b            [2] => c2            [3] => d2        )    [5] => Array        (            [0] => a1            [1] => b            [2] => c2            [3] => d3        )    [6] => Array        (            [0] => a2            [1] => b            [2] => c1            [3] => d1        )    [7] => Array        (            [0] => a2            [1] => b            [2] => c1            [3] => d2        )    [8] => Array        (            [0] => a2            [1] => b            [2] => c1            [3] => d3        )    [9] => Array        (            [0] => a2            [1] => b            [2] => c2            [3] => d1        )    [10] => Array        (            [0] => a2            [1] => b            [2] => c2            [3] => d2        )    [11] => Array        (            [0] => a2            [1] => b            [2] => c2            [3] => d3        ))


原创粉丝点击