@inajaf

Как сконвертировать в массив и после в json структуру дерева?

Ребят на входе получаю след json, который нужно преобразовать в похожий вид указанный на фото ниже, как возможно это сделать имея текущий формат json ?
[
    [
        {
            "lvl": 0,
            "title_en": "Top Menu",
            "content_en": "<p>Top Menu</p>",
            "slug": "top-menu",
            "pageAssets": [],
            "created_at": "2022-03-29 15:21:38",
            "updated_at": "2022-04-11 16:45:17"
        }
    ],
    [
        {
            "lvl": 1,
            "title_en": "About",
            "content_en": "<p>About<br></p>",
            "slug": "about",
            "pageAssets": [],
            "created_at": "2022-04-06 10:41:39",
            "updated_at": "2022-04-06 11:00:33"
        }
    ],
    [
        {
            "lvl": 2,
            "title_en": "Test Title",
            "content_en": ": prosperity in Eurasia.</p>",
            "slug": "test-view",
            "pageAssets": [],
            "created_at": "2022-04-06 10:44:16",
            "updated_at": "2022-04-08 15:20:22"
        }
    ],
    [
        {
            "lvl": 2,
            "title_en": "Connectivity beyond borders",
            "content_en": " test content providers.",
            "slug": "connectivity-beyond-borders",
            "pageAssets": [
                {
                    "id": 71,
                    "page_id": 32,
                    "is_cover": 1,
                    "title": null,
                    "asset": "625030e8011971.07490872.jpg",
                    "created_at": "2022-04-08 16:56:04",
                    "updated_at": "2022-04-08 16:56:04"
                },
                {
                    "id": 73,
                    "page_id": 32,
                    "is_cover": 0,
                    "title": null,
                    "asset": "625030e805d5b8.82639365.jpg",
                    "created_at": "2022-04-08 16:56:04",
                    "updated_at": "2022-04-08 16:56:04"
                }
            ],
            "created_at": "2022-04-06 10:44:54",
            "updated_at": "2022-04-06 10:44:54"
        }
    ],


62552d997d6dc119048901.png
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
@inajaf Автор вопроса
private function getAllNodes(): array
{
$nodes = $this->modelClass::find()
->where(['active' => 1, 'visible' => 1])
->orderBy(['lft' => SORT_ASC])
->all();

$menuArray = array();
foreach($nodes as $node) {
$menuArray[$node->id] = $node->attributes;
}
return $menuArray;
}

public function treeArray(): array
{
$nodes = $this->getAllNodes();

$result = array();
$stack = array();

foreach ($nodes as $node) {
$item = $node;
$item['children'] = array();

$level = count($stack);

while($level > 0 && $stack[$level - 1]['lvl'] >= $item['lvl']) {
array_pop($stack);
$level--;
}

if ($level === 0) {
$i = count($result);
$result[$i] = $item;
$stack[] = & $result[$i];
} else {
$i = count($stack[$level - 1]['children']);
$stack[$level - 1]['children'][$i] = $item;
$stack[] = & $stack[$level - 1]['children'][$i];
}
}

return $result;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы