Каков самый простой способ преобразования этого массива 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));
Как этот:
$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