1013,1014c1013,1014 < * No doubt there is some elegant way to permute any number of arrays, < * but this implementation is limited to five. --- > * This combination code submitted by brmassa - July 22, 2006 > * http://drupal.org/node/75020 1019,1071c1019,1036 < function subproducts_permute($array) { < $results = array(); < $keys = array_keys($array); < < switch (count($keys)) { < case 1: < foreach($array[$keys[0]] as $val0) { < $results[]= array($keys[0] => $val0); < } < break; < case 2: < foreach($array[$keys[0]] as $val0) { < foreach($array[$keys[1]] as $val1) { < $results[]= array($keys[0] => $val0, $keys[1] => $val1); < } < } < break; < case 3: < foreach($array[$keys[0]] as $val0) { < foreach($array[$keys[1]] as $val1) { < foreach($array[$keys[2]] as $val2) { < $results[]= array($keys[0] => $val0, $keys[1] => $val1, $keys[2] => $val2); < } < } < } < break; < case 4: < foreach($array[$keys[0]] as $val0) { < foreach($array[$keys[1]] as $val1) { < foreach($array[$keys[2]] as $val2) { < foreach($array[$keys[3]] as $val3) { < $results[]= array($keys[0] => $val0, $keys[1] => $val1, $keys[2] => $val2, $keys[3] => $val3); < } < } < } < } < break; < case 5: < default: < foreach($array[$keys[0]] as $val0) { < foreach($array[$keys[1]] as $val1) { < foreach($array[$keys[2]] as $val2) { < foreach($array[$keys[3]] as $val3) { < foreach($array[$keys[4]] as $val4) { < $results[]= array($keys[0] => $val0, $keys[1] => $val1, $keys[2] => $val2, $keys[3] => $val3, $keys[4] => $val4); < } < } < } < } < } < break; < } < return $results; --- > function subproducts_permute($array, $start = 0, $value = array(), $results = array()) { > $keys = array_keys($array) ; > $number = count($keys) -1; > > foreach($array[$keys[$start]] as $value[$start] ) { > if ($start < $number) { > $results = subproducts_permute($array, $start+1, $value, $results); > } > else { > $values=array(); > for($i = 0; $i <= $number ; $i++){ > $values[$keys[$i]]= $value[$i] ; > } > $results[] = $values; > } > } > > return $results;