Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to generate in PHP all combinations of items in multiple arrays

I'im trying to find all combinations of items in several arrays. The number of arrays is random (this can be 2, 3, 4, 5...). The number of elements in each array is random too...

For exemple, I have the 3 arrays :

$arrayA = array('A1','A2','A3'); $arrayB = array('B1','B2','B3'); $arrayC = array('C1','C2'); 

I would like to generate an array with 3 x 3 x 2 = 18 combinations :

  • A1, B1, C1
  • A1, B1, C2
  • A1, B2, C1
  • A1, B2, C2
  • A1, B3, C1
  • A1, B3, C2
  • A2, B1, C1
  • A2, B1, C2 ...

The problem is to create a function with a variable number of source arrays...

like image 369
Yohan Avatar asked Dec 19 '11 20:12

Yohan


1 Answers

Here is recursive solution:

function combinations($arrays, $i = 0) {     if (!isset($arrays[$i])) {         return array();     }     if ($i == count($arrays) - 1) {         return $arrays[$i];     }      // get combinations from subsequent arrays     $tmp = combinations($arrays, $i + 1);      $result = array();      // concat each array from tmp with each element from $arrays[$i]     foreach ($arrays[$i] as $v) {         foreach ($tmp as $t) {             $result[] = is_array($t) ?                  array_merge(array($v), $t) :                 array($v, $t);         }     }      return $result; }  print_r(     combinations(         array(             array('A1','A2','A3'),              array('B1','B2','B3'),              array('C1','C2')         )     ) ); 
like image 68
Krzysztof Avatar answered Sep 22 '22 13:09

Krzysztof