簡體   English   中英

在php中將列表更改為嵌套對象的最有效方法是什么

[英]What is the most efficient way to change a list to a nested object in php

我有一個這樣的列表(數據庫中的查詢結果):

[
    {
        "id": "1",
        "parent_id": null,
        "title": "مدادنوکی",
        "url": "/medadnoki"
    },
    {
        "id": "2",
        "parent_id": null,
        "title": "جامعه",
        "url": "/commiunity"
    },
    {
        "id": "5",
        "parent_id": "1",
        "title": "درباره ی مدادنوکی",
        "url": "/about"
    },
    {
        "id": "6",
        "parent_id": "1",
        "title": "درباره ی مدادنوکی",
        "url": "/about"
    },
    {
        "id": "7",
        "parent_id": "2",
        "title": "همکاران",
        "url": "/co-worker"
    },
    {
        "id": "8",
        "parent_id": "2",
        "title": "اساتید",
        "url": "/masters"
    }
]

但是我想創建一個像這樣的對象:

[
                {
                    "title": "مدادنوکی",
                    "url": "/medadnoki",
                    "subs" : [
                        {
                            "title": "درباره مدادنوکی",
                            "url": "/about"
                        },
                        {
                            "title": "درباره مدادنوکی",
                            "url": "/about"
                        },
                        {
                            "title": "درباره مدادنوکی",
                            "url": "/about"
                        },
                        {
                            "title": "درباره مدادنوکی",
                            "url": "/about"
                        }
                    ]
                },
                {
                    "title": "جامعه",
                    "url": "/soc",
                    "subs" : [
                        {
                            "title": "همکاران",
                            "url": "/co-work"
                        },
                        {
                            "title": "اساتید",
                            "url": "/masters"
                        }
                    ]
                }
            ]

我已經用php中的兩個foreach處理了此過程,這意味着我處理了兩次數據,效率不高,而且速度很慢。 是否只有一個foreach可以做到這一點? 使用一個foreach意味着比兩個foreach快兩次,它將在大數據中顯示結果

假設您按順序排列結果,使父母在結果中早於可能出現的任何孩子,這應該起作用:

$nested = [];
foreach($results as $r) {
  if($r['parent_id'] === null) {
    $nested[$r['id']] = [
      'title' => $r['title'],
      'url'   => $r['url'],
      'subs'  => []
    ];
    continue;
  }
  $nested[$r['parent_id']]['subs'][] = [
    'title' => $r['title'],
    'url'   => $r['url']
  ];
}
$nested = array_values($nested);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM