Построить дерево с ветвями в php

У меня есть переменная $categories, которая возвращает следующие данные JSON. Я хотел бы построить Tree- > Branches в Php из этой переменной. Есть идеи?

+Общественные
- Электроника
.....- Компьютеры
........+ iPad-Планшеты
.....+ Свет
..... + Бытовая техника
+ Спорт

{
"categories": [
    {
        "ID": 0,
        "Name": "Public",
        "Parent": 0,
        "created": null,
        "modified": "2017-03-13T15:16:58+00:00"
    },
    {
        "ID": 4,
        "Name": "Electronics",
        "Parent": 0,
        "created": "2017-03-13T15:18:21+00:00",
        "modified": "2017-03-13T15:18:21+00:00"
    },
    {
        "ID": 5,
        "Name": "Computer",
        "Parent": 4,
        "created": "2017-03-13T15:18:34+00:00",
        "modified": "2017-03-13T15:18:34+00:00"
    },
    {
        "ID": 12,
        "Name": "iPad-Tablets",
        "Parent": 5,
        "created": "2017-05-15T13:55:38+00:00",
        "modified": "2017-05-15T13:55:38+00:00"
    }
]
}

person Majid Nasirinejad    schedule 15.05.2017    source источник
comment
Прежде чем вы сможете манипулировать этими данными, вам нужно будет использовать json_decode: php.net/ руководство/ru/function.json-decode.php   -  person Josan Iracheta    schedule 15.05.2017
comment
Я согласен с Джосаном, вы должны сначала использовать json_decode, чтобы получить формат вложенного массива, и тогда будет легко манипулировать данными.   -  person zenwraight    schedule 15.05.2017
comment
Пожалуйста, покажите, как именно выглядит желаемый результат.   -  person Roman Hocke    schedule 15.05.2017
comment
Проверьте: один два три   -  person Alexey Chuhrov    schedule 15.05.2017
comment
@DanMiller Спасибо. Третье решение работает для меня.   -  person Majid Nasirinejad    schedule 16.05.2017


Ответы (1)


Это решение работает для моей проблемы. Спасибо @DanMiller

function generatePageTree($datas, $parent = 0, $depth=0){               
    if($depth > 100) return ''; //Make sure not to have an endless recursion
    $tree = '<ul>';
    for($i=0, $ni=count($datas); $i < $ni; $i++){
        if($datas[$i]->Parent == $parent){
            $tree .= '<li>';
            $tree .= $datas[$i]->Name;
            $tree .= generatePageTree($datas, $datas[$i]->ID, $depth+1);
            $tree .= '</li>';
        }
    }
    $tree .= '</ul>';
    return $tree; 
}
$tree=generatePageTree($categoriesOptions);
echo $tree;
person Majid Nasirinejad    schedule 16.05.2017