Динамическая иерархия Рекурсивный вывод в PHP - PullRequest
0 голосов
/ 08 июня 2018

Может ли кто-нибудь указать мне направление или помочь мне с желаемым результатом?По сути, $cats происходит из цикла foreach и может иметь любую длину, а иерархический уровень - это index.

Actual Stored Data
------------------
$cats = [];
$cats[] = [
    ["cat1" => "Category Parent"],
    ["cat2" => "Category Child"],
    ["cat3" => "Category Child Child"]
];
$cats[] = [
    ["cat4" => "Different Category Parent"],
    ["cat5" => "Different Category Child"],
    ["cat6" => "Different Category Child"]
];
$cats[] = [
    ["cat1" => "Category Parent"],
    ["cat7" => "Different Again Category Child"],
    ["cat8" => "Category Child Different"]
];

Desired Output
------------------ 
$heirarchy = [
    'Root' => [
        'nodes' => [
            [
                'label' => 'Category Parent',
                'id' => 'cat1',
                'nodes' => [
                    [
                        'label' => 'Category Child',
                        'id' => 'cat2',
                        'nodes' => [
                            'label' => 'Category Child Child',
                            'id' => 'cat3'
                        ]
                    ],
                    [
                        'label' => 'Different Again Category Child',
                        'id' => 'cat7',
                        'nodes' => [
                            'label' => 'Category Child Different',
                            'id' => 'cat8'
                        ]
                    ],
                ]
            ],
            [
                'label' => 'Different Category Parent',
                'id' => 'cat4',
                'nodes' => [
                    'label' => 'Different Category Child',
                    'id' => 'cat5',
                    'nodes' => [
                        'label' => 'Different Category Child Child',
                        'id' => 'cat6'
                    ],
                ],
            ]
        ]
    ]
];

Это то, что у меня есть, но я не учитывал добавление в массив, если он уже существует ($cats[0] и $cats[2])

public function process_array(&$shifted,$first_element){
        $key = key($first_element);
        $return = [
            'label' => $first_element[$key],
            'id' => $key
        ];
        if(count($shifted)){
            $first = $shifted[0];
            array_shift($shifted);
            $return['nodes'] = $this->process_array($shifted,$first);
        }
        return $return;
    }


$heirarchy = [
            'Root' => [
                'nodes' => []
            ]
        ];
        foreach($cats as $cat){
            if(is_array($cat)){
                $first = $cat[0];
                array_shift($cat);
                $heirarchy['Root']['nodes'][] = $this->process_array($cat,$first);
            }
        }
...