functionDescartes() {$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','a3'),
'b',
array('c1','c2'),
array('d1','d2','d3'),
//......省略其它元素(也可以是数组),
);$r = Descartes( $arr);var_dump($r);exit;/*array(18) {
[0]=>
array(4) {
[0]=>
string(2) "a1"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d1"
}
[1]=>
array(4) {
[0]=>
string(2) "a1"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d2"
}
[2]=>
array(4) {
[0]=>
string(2) "a1"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d3"
}
[3]=>
array(4) {
[0]=>
string(2) "a1"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d1"
}
[4]=>
array(4) {
[0]=>
string(2) "a1"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d2"
}
[5]=>
array(4) {
[0]=>
string(2) "a1"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d3"
}
[6]=>
array(4) {
[0]=>
string(2) "a2"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d1"
}
[7]=>
array(4) {
[0]=>
string(2) "a2"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d2"
}
[8]=>
array(4) {
[0]=>
string(2) "a2"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d3"
}
[9]=>
array(4) {
[0]=>
string(2) "a2"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d1"
}
[10]=>
array(4) {
[0]=>
string(2) "a2"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d2"
}
[11]=>
array(4) {
[0]=>
string(2) "a2"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d3"
}
[12]=>
array(4) {
[0]=>
string(2) "a3"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d1"
}
[13]=>
array(4) {
[0]=>
string(2) "a3"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d2"
}
[14]=>
array(4) {
[0]=>
string(2) "a3"
[1]=>
string(1) "b"
[2]=>
string(2) "c1"
[3]=>
string(2) "d3"
}
[15]=>
array(4) {
[0]=>
string(2) "a3"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d1"
}
[16]=>
array(4) {
[0]=>
string(2) "a3"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d2"
}
[17]=>
array(4) {
[0]=>
string(2) "a3"
[1]=>
string(1) "b"
[2]=>
string(2) "c2"
[3]=>
string(2) "d3"
}
}*/