function all($array, $partial, &$result) { if ($array == array()) { $result[] = implode(',', $partial); return; } for($i=0; $i<count($array);$i++) { $e = $array[$i]; $a = $array; array_splice($a, $i, 1); foreach($e as $v) { $p = $partial; $p[] = $v; all($a, $p, $result); } } }
Test:
$a = array(1, 2, 3); $b = array('foo', 'bar'); $c = array('a', 'b'); $params = array($a, $b, $c); $result = array(); all($params, array(), $result); print_r($result);
Note: if there is a possibility of duplication (arrays contain the same values), you can check for duplicates before inserting $ into the result.
source share