首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归PHP树(排列)

递归PHP树(排列)
EN

Stack Overflow用户
提问于 2015-02-23 21:36:21
回答 1查看 226关注 0票数 0

我想写一个函数来创建数组列表的所有排列(列表是动态的)。现在我找到了两篇文章,http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/Finding cartesian product with PHP associative arrays。但我不想将它们存储为多个数组,我希望将每个数组添加到每个可能性中,以便以后可以使用它们。

实际上,我想把每个数组相乘。

例如:

代码语言:javascript
复制
$array = array(
    array(
        1,
        2
        ),
    array(
        'A',
        'B',
        'C'),
    array(
        'I',
        'II')
    );

以这种形式:

代码语言:javascript
复制
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 ($array1 as $value) { $return1[] =$return1($value,$array2);}

代码语言:javascript
复制
foreach ($array[0] as $value) {
    $return[] = array($value, $return1);
}

print_r($return);

现在,我想在递归函数中创建这个函数(因此它变得动态),但是我被卡住了。我想将数组的数量传递给函数,然后迭代。

代码语言:javascript
复制
function createTree($array, $loops=3){

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

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

也许还有其他的解决方案可以让数组相乘呢?但是这个不是递归的函数对我来说很容易,但是它是递归的.

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 22:36:48

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28683938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档