2015-02-23 4 views
0

Я ищу, чтобы написать функцию, которая создает всю перестановку списка массивов (список динамический). Теперь я нашел 2 статьи, http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/ и Finding cartesian product with PHP associative arrays. Но я не хочу хранить их как несколько массивов, я хочу добавить каждый массив к каждой возможности, чтобы впоследствии использовать их.Рекурсивное дерево PHP (перестановки)

На самом деле я хочу умножить каждый массив на другой.

Например:

$array = array(
    array(
     1, 
     2 
     ), 
    array(
     'A', 
     'B', 
     'C'), 
    array(
     'I', 
     'II') 
    ); 

В этой форме:

Array 
(
[0] => Array 
    (
     [0] => 1 
     [1] => Array 
      (
       [0] => Array 
        (
         [0] => A 
         [1] => Array 
          (
           [0] => I 
           [1] => II 
          ) 
        ) 
       [1] => Array 
        (
         [0] => B 
         [1] => Array 
          (
           [0] => I 
           [1] => II 
          ) 
        ) 
       [2] => Array 
        (
         [0] => C 
         [1] => Array 
          (
           [0] => I 
           [1] => II 
          ) 
        ) 
      ) 
    ) 
[1] => Array 
    (
     [0] => 2 
     [1] => Array 
      (
       [0] => Array 
        (
         [0] => A 
         [1] => Array 
          (
           [0] => I 
           [1] => II 
          ) 
        ) 
       [1] => Array 
        (
         [0] => B 
         [1] => Array 
          (
           [0] => I 
           [1] => II 
          ) 
        ) 
       [2] => Array 
        (
         [0] => C 
         [1] => Array 
          (
           [0] => I 
           [1] => II 
          ) 
        ) 
      ) 
    ) 
) 

Я думаю, что это большой пример сделал моя проблема ясна. Для этого типа массива я создал функцию: foreach ($ array [1] as $ value) { $ return1 [] = array ($ value, $ array [2]); }

foreach ($array[0] as $value) { 
    $return[] = array($value, $return1); 
} 

print_r($return); 

Теперь я хочу, чтобы создать эту функцию внутри рекурсивной функции (так он становится динамичным), но я застрял. Я хотел передать количество массивов функции, а затем повторить.

function createTree($array, $loops=3){ 

$b = $array[$loops-2]; 

foreach ($b as $v) { 
    $return[] = array($v, createTree($return, $loops-1)); 
} 
print_r($return); 
} 

Возможно, существует другое другое решение для умножения массивов? Но функция, которая не является рекурсивным легко для меня, но делает это рекурсивный ...

Спасибо за вашу помощь

+0

Рекурсивная функция ни я использую: 'Еогеасп ($ массив [1 ] как $ value) { \t \t $ return1 [] = массив ($ value, $ array [2]); \t} \t Еогеасп ($ массив [0] в качестве значения $) { \t \t $ возврата [] = массив ($ значение, $ return1); \t} \t print_r ($ return); ' – user3278918

ответ

0
function createTree($array){ 
    switch(count($array)) { 
    case 0: 
     die('Illegal argument.'); 
    case 1: 
     return $array[0]; 
    default: 
     $lastArray = array_pop($array); 

     $subArray = createTree($array); 

     foreach ($lastArray as $item) { 
      $return[] = array($item, $subArray); 
     } 

     return $return; 
    } 
} 

var_dump(createTree(array_reverse($array))); 
+0

Спасибо большое! Этот ответ - идеальное решение. Это помогло мне. – user3278918

Смежные вопросы