Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用物化路径将平面数组转换为嵌套数组_Php_Arrays_Mongodb_Materialized Path Pattern - Fatal编程技术网

Php 使用物化路径将平面数组转换为嵌套数组

Php 使用物化路径将平面数组转换为嵌套数组,php,arrays,mongodb,materialized-path-pattern,Php,Arrays,Mongodb,Materialized Path Pattern,我有一些类别需要转换为嵌套数组树。我使用物化路径生成一棵树,我使用PHP。这是我的照片: Array ( [0] => Array ( [_id] => mac [name] => Mac [path] => null ) [1] => Array ( [_id] => ipod

我有一些类别需要转换为嵌套数组树。我使用物化路径生成一棵树,我使用PHP。这是我的照片:

Array
(
    [0] => Array
        (
            [_id] => mac
            [name] => Mac
            [path] => null
        )

    [1] => Array
        (
            [_id] => ipod
            [name] => iPod
            [path] => null
        )

    [2] => Array
        (
            [_id] => imac
            [name] => iMac
            [path] => ,mac,
        )

    [3] => Array
        (
            [_id] => imac2001
            [name] => iMac 2001
            [path] => ,mac,imac,
        )

    [4] => Array
        (
            [_id] => imac2002
            [name] => iMac 2002
            [path] => ,mac,imac,
        )

    [5] => Array
        (
            [_id] => imac2003
            [name] => iMac 2003
            [path] => ,mac,imac,
        )

)
我试图做到这一点,但我完全沉浸在递归函数的概念中

更新:

以下是我最终想要的:

Array
(
    [0] => Array
        (
            [_id] => mac
            [name] => Mac
            [path] => null
            [children] =>
                [0] => Array
                    (
                        [_id] => imac
                        [name] => iMac
                        [path] => ,mac,
                        [children] =>
                            [0] => Array
                                (
                                    [_id] => imac2001
                                    [name] => iMac 2001
                                    [path] => ,mac,imac,
                                )

                            [1] => Array
                                (
                                    [_id] => imac2002
                                    [name] => iMac 2002
                                    [path] => ,mac,imac,
                                )

                            [2] => Array
                                (
                                    [_id] => imac2003
                                    [name] => iMac 2003
                                    [path] => ,mac,imac,
                                )
                    )
        )

    [1] => Array
        (
            [_id] => ipod
            [name] => iPod
            [path] => null
        )
)

我想向您展示我已经编写的代码,但它远没有起作用,因此在我看来没有什么好东西可看。

我找到了一个解决方案。它对我有用,所以它在这里:

<?php

$categories = Array
(
    [0] => Array
        (
            ["_id"] => "mac"
            ["name"] => "Mac"
            ["path"] => null
        )

    [1] => Array
        (
            ["_id"] => "ipod"
            ["name"] => "iPod"
            ["path"] => null
        )

    [2] => Array
        (
            ["_id"] => "imac"
            ["name"] => "iMac"
            ["path"] => ",mac,"
        )

    [3] => Array
        (
            ["_id"] => "imac2001"
            ["name"] => "iMac 2001"
            ["path"] => ",mac,imac,"
        )

    [4] => Array
        (
            ["_id"] => "imac2002"
            ["name"] => "iMac 2002"
            ["path"] => ",mac,imac,"
        )

    [5] => Array
        (
            ["_id"] => "imac2003"
            ["name"] => "iMac 2003"
            ["path"] => ",mac,imac,"
        )
)

$categoriesNested = sortTree($categories);

function sortTree(&$categories, $parent = null)
{
    $result = array();

    foreach($categories as $key => $cat)
    {
        if($parent == null)
        {
            $temp = $cat;
            unset($categories[$key]);
            $temp["children"] = $this->sortTree($categories, $cat);
            $result[] = $temp;
        }
        else
        {
            $tempPath = array_values(array_filter(explode(',', $cat["path"])));
            $directParent = array_pop($tempPath);
            if ($parent["_id"] == $directParent)
            {
                $temp = $cat;
                unset($categories[$key]);
                $temp["children"] = $this->sortTree($categories, $cat);
                $result[] = $temp;
            }
        }
    }

    if (empty($result))
        return null;
    else
        return $result;
}

我们看看你有什么。但问题是:你需要什么,你做了什么?好吧,我更新了我的帖子。它必须是数组还是也可以是对象?另外,数组的顺序是否总是正确的?那么这两条路是互相衔接的?