Index: subproducts.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/ecommerce/subproducts/subproducts.module,v retrieving revision 1.26 diff -u -r1.26 subproducts.module --- subproducts.module 18 Jun 2006 23:48:36 -0000 1.26 +++ subproducts.module 8 Aug 2006 17:34:05 -0000 @@ -1,5 +1,5 @@ $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); - } - } - } - } +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] ; } - break; + $results[] = $values; + } } return $results; }