<?php 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"))); ?>