php генерирует все комбинации из заданного массива

Каков самый простой способ преобразования этого массива PHP

 $a = array('A' => array(1, 2), 'B' => array(3, 4), 'C' => array(5)); 

в это:

 $result = array( array('A' => 1, 'B' => 3, 'C' => 5), array('A' => 1, 'B' => 4, 'C' => 5), array('A' => 2, 'B' => 3, 'C' => 5), array('A' => 2, 'B' => 4, 'C' => 5), ); 

$a может иметь много разных keys я не знаю во время разработки. Поэтому мне нужно сгенерировать все комбинации в заданном массиве.

ОБНОВИТЬ:

Я должен генерировать URLs основанные на входящем массиве. Поэтому я не знаю, сколько параметров я получу во время разработки. У меня есть только массив параметров, это может быть, например,

 $a = array('A' => array(5,3, 1)); 

результатом будет:

 $result = array( array('A' => 5), array('A' => 3), array('A' => 1)); 

или

 $a = array('X' => array(5), 'D' => array(4, 7)); 

результатом будет:

 $result = array( array('X' => 5, 'D' => 4), array('X' => 5, 'D' => 7)); 

Related of "php генерирует все комбинации из заданного массива"

Как этот:

 $a = array('A' => array(1, 2), 'B' => array(3, 4), 'C' => array(5)); function get_combinations($arrays) { $result = array(array()); foreach ($arrays as $property => $property_values) { $tmp = array(); foreach ($result as $result_item) { foreach ($property_values as $property_value) { $tmp[] = array_merge($result_item, array($property => $property_value)); } } $result = $tmp; } return $result; } 

Вывод

 var_dump(get_combinations($a)); array (size=4) 0 => array (size=3) 'A' => int 1 'B' => int 3 'C' => int 5 1 => array (size=3) 'A' => int 1 'B' => int 4 'C' => int 5 2 => array (size=3) 'A' => int 2 'B' => int 3 'C' => int 5 3 => array (size=3) 'A' => int 2 'B' => int 4 'C' => int 5 

Вы можете использовать эту функцию для этого запроса:

 function pc_array_power_set($array) { // initialize by adding the empty set $results = array(array( )); foreach ($array as $element) foreach ($results as $combination) array_push($results, array_merge(array($element), $combination)); return $results; } 

Применение:

 $set = array('A', 'B', 'C'); $power_set = pc_array_power_set($set); 

Вывод:

 array( ); array('A'); array('B'); array('C'); array('A', 'B'); array('A', 'C'); array('B', 'C'); array('A', 'B', 'C'); 

Ресурс: http://docstore.mik.ua/orelly/webprog/pcook/ch04_25.htm