function Descartes(){ $t = func_get_args(); if (func_num_args() == 1) { $t0 = $t[0]; return call_user_func_array(__FUNCTION__, $t0); } $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;}
函数说明:
func_get_args 返回一个包含函数参数列表的数组
func_num_args 返回参数传递给函数的数量
call_user_func_array 调用回调函数,并把一个数组参数作为回调函数的参数
array_shift 将数组开头的单元移出数组
array_chunk 将一个数组分割成多个
array_merge 合并一个或多个数组