--- developer/modules/ecommerce-4.7.0/subproducts/subproducts.module 2006-09-04 03:02:46.000000000 -0600 +++ developer/modules/ecommerce-4.7.0-hacks/subproducts/subproducts.module 2006-09-15 13:18:21.000000000 -0600 @@ -1010,65 +1010,30 @@ function subproducts_admin_sql() { * lists of potential subproducts, from which users can select which * ones to generate. * - * 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 * * @param $array * Structured array of attributes. */ -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; } /**