Как рекурсивно обработать данные

Имеется данные в бд

 Id       Parent_id      Name
 1         0             Обувь
 2         1             Мужская
 3         1             Женская
 4         1             Детская
 5         4             Летняя/Зимняя 
 6         5             Кожаная/не кожаная/совсем не кожаная
 7         6             Китайская/не китайская/японская

Как обработать такие данные что создать дерево например в том же JS или PHP? Хочу добиться вот такой вложенности:

Обувь--- Мужская
         Женская
         Детская
           |
           |----- Летняя/Зимняя               
                   |
                   |---- Кожаная/не кожаная/совсем не кожаная
                          |
                          |--Китайская/не китайская/японская

Ответы (1 шт):

Автор решения: Павел Топский

Всем спасибо за помощь, пришел к таком решению

function build_tree(cats,parent_id, only_parent = false){
    let tree = []
    if(Array.isArray(cats) && cats[parent_id]){
        if(!only_parent) {
            cats[parent_id].map(function (cat, loli){
                tree.push(<TreeItem nodeId={parent_id+'.'+cat['id']} label={cat['name']}>
                    {build_tree(cats, cat['id'])}
                </TreeItem>);
            })
        }
    }
    return tree
}
→ Ссылка