簡體   English   中英

遞歸PHP樹(排列)

[英]Recursive PHP Tree (permutations)

我正在尋找一個函數,它創建一個數組列表的所有排列(列表是動態的)。 現在我發現了2篇文章http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/使用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);
}

也許有另外一個解決方案來增加陣列? 但是不是遞歸的函數對我來說很容易,但是讓它遞歸...

謝謝你的幫助

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)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM