function combination(){
$array = array();
$arguments = func_get_args();
foreach($arguments as $argument){
if(is_array($argument) === true){
$array[] = $argument;
}else{
$array[] = array($argument);
}
}
$size = count($array);
if($size === 0){
return array();
}else if($size === 1){
return is_array($array[0]) === true ? $array[0] : array();
}else{
$result = array();
$a = $array[0];
array_shift($array);
if(is_array($array) === false){
return $result;
}
foreach($a as $val){
$b = call_user_func_array("combination", $array);
foreach($b as $c){
if(is_array($c) === true){
$result[] = array_merge(array($val), $c);
}else{
$result[] = array($val, $c);
}
}
}
return $result;
}
}
print_r(combination(array("A1", "A2"), array("B1", "B2"), "1", array("C1", "C2", "C3")));
?>