2015-02-23 135 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

我使用的無遞歸函數是: '的foreach($陣列[1 ]作爲$ value){ \t \t $ return1 [] = array($ value,$ array [2]); \t} \t的foreach($數組[0]爲$值){ \t \t $返回[] =陣列($值,$ RETURN1); \t} \t print_r($ return);' – user3278918 2015-02-23 21:38:20

回答

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 2015-02-24 07:22:53