Search code examples
phparraysrecursionstructureparent-child

Convert multidimensional data into named parent-child hierarchy


I have a php-array which is generated like following:

$array['Top Level']['Level 2: A']['Son of A'] = "item";
$array['Top Level']['Level 2: A']['Daughter of A'] = "item";
$array['Top Level']['Level 2: B'] = "item";

A json_encode gives me the following output:

{
   "Top Level":{
      "Level 2: A":{
         "Son of A":"item",
         "Daughter of A":"item"
      },
      "Level 2: B":"item"
   }
}

The output I need looks like this:

{
   "name":"Top Level",
   "parent":"null",
   "children":[
      {
         "name":"Level 2: A",
         "parent":"Top Level",
         "children":[
            {
               "name":"Son of A",
               "parent":"Level 2: A"
            },
            {
               "name":"Daughter of A",
               "parent":"Level 2: A"
            }
         ]
      },
      {
         "name":"Level 2: B",
         "parent":"Top Level"
      }
   ]
}

How can I realize that? Another realization method is not applicable because of my data source.


Solution

  • You need to add element to the array using the keys you already have in order to have something like:

    $array = array (
        "name" => "Top Level",
        "parent" => "null",
        "children" => array (
            "name" => "Level 2: A",
            "parent" => "Top Level",
            "children" => array (
                // ...
            )
        )
    );