2

I have an array like below:

 Array ( [0] => Array ( [SI] => 1 
                        [name] => Nick 
                        [location] => Russia
                        [year] => 2011 ) 
        [1] => Array ( [SI] => 8 
                       [name] => Mike 
                       [location] => Russia 
                       [year] => 2011 )
        [2] => Array ( [SI] => 2 
                       [name] => Tom 
                       [location] => Russia 
                       [year] => 2010 )
        [3] => Array ( [SI] => 6 
                       [name] => Duke 
                       [location] => Russia 
                       [year] => 2010 ) )     

Current JSON format:

 {
"name": "Amalians",
"img": "https:\/\/dl.dropboxusercontent.com\/u\/19954023\/marvel_force_chart_img\/marvel.png",
"children": [
    {
        "name": "2011"
    },
    {
        "children": [
            {
                "SI": "1"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Nick"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    },
    {
        "name": "2011"
    },
    {
        "children": [
            {
                "SI": "8"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Mike"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    },
    {
        "name": "2010"
    },
    {
        "children": [
            {
                "SI": "2"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Tom"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    },
    {
        "name": "2010"
    },
    {
        "children": [
            {
                "SI": "6"
            }
        ]
    },
    {
        "children": [
            {
                "name": "Duke"
            }
        ]
    },
    {
        "children": [
            {
                "location": "Russia"
            }
        ]
    }
  ]
}

Desired JSON format:

 {
   "name": "marvel",
   "img": "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png",
   "children": [
    {
       "name": "2011",
       "children": [
        {
           "SI": "1",
           "name": "Nick", 
           "location": "Russia"
        },
        {
           "SI": "8",
           "name": "Mike", 
           "location": "Russia"
        }
       ]
     },
     {
       "name": "2010",
       "children": [
        {
           "SI": "2",
           "name": "Tom", 
           "location": "Russia"
        },
        {
           "SI": "6",
           "name": "Duke", 
           "location": "Russia"
        }
       ]
      }
    ]
 }    

CODE:

    $data['name'] = "Amalians";
    $data['img'] = "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png";

    foreach($people as $row)
    {

            $data['children'][]['name'] = $row['year'];
            $data['children'][]['children'][]['SI'] = $row['SI'];
            $data['children'][]['children'][]['name'] = $row['name'];
            $data['children'][]['children'][]['location'] = $row['location'];
    }
    echo "<pre>";
    echo json_encode($data,JSON_PRETTY_PRINT);
    echo "</pre>"; exit();     

NOTE: $people is the array defined above.
Please kindly help me to do this. I have been working on this for last two days and till this moment I couldn't find any solution. Thanks

3 Answers 3

1

i guess the simplest way is to group your data

$arrData = [
    [
        "SI" => 1,
        "name" => "Nick",
        "location" => "Russia",
        "year" => 2011
    ],
    [
        "SI" => 2,
        "name" => "Mike",
        "location" => "Russia",
        "year" => 2011
    ],
    [
        "SI" => 3,
        "name" => "Tom",
        "location" => "Russia",
        "year" => 2010
    ],
    [
        "SI" => 4,
        "name" => "Duke",
        "location" => "Russia",
        "year" => 2010
    ],
];

$arrGroupedData = [];


foreach($arrData AS $row)
{
    $arrGroupedData[$row['year']][] = [ "SI" => $row['SI'],  "name" => $row['name'], "location" => $row['location']];

}

$arrGroupFormattedData = [];

foreach($arrGroupedData AS $key => $arrGroup)
{
    $arrGroupFormattedData[] = ["name" => $key, "children" => $arrGroup];
}

$data = [
    "name" => "Amalians",
    "img" => "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png",
    "children" => $arrGroupFormattedData
];

echo json_encode($data,JSON_PRETTY_PRINT);
Sign up to request clarification or add additional context in comments.

1 Comment

Wow... Its perfect. You made my day :) (Y)
1

You can try this:

Here you need to group the array by key year.

$array = array();
foreach ($people as $val) {
    $array[$val['year']][] = $val;
}

$data['name'] = "Amalians";
$data['img'] = "https://dl.dropboxusercontent.com/u/19954023/marvel_force_chart_img/marvel.png";

$i = 0;
foreach ($array as $key => $value) {
    foreach ($value as $key2 => $value2) {
        $data['children'][$i]['name'] = $value2['year'];
        $data['children'][$i]['children'][$key2]['SI'] = $value2['SI'];
        $data['children'][$i]['children'][$key2]['name'] = $value2['name'];
        $data['children'][$i]['children'][$key2]['location'] = $value2['location'];
    }
    $i++;
}

echo "<pre>";
echo json_encode($data, JSON_PRETTY_PRINT);
echo "</pre>";
exit();

Comments

0
    <?php
    $array =  Array(Array( "SI" => 1, 
                            "name" => Nick, 
                            "location" => Russia,
                            "year" => 2011), 
                    Array ( "SI" => 8, 
                           "name" => Mike ,
                           "location" => Russia ,
                           "year" => 2011),
                    Array ( "SI" => 2, 
                           "name" => Tom, 
                           "location" => Russia, 
                           "year" => 2010 ),
                    Array ( "SI" => 6, 
                           "name" => Duke, 
                           "location" => Russia ,
                           "year" => 2010 ) );
    $json_final['child'] = array();
    $temp = array();
    foreach($array as $arr)
    {
        $flag=0;
        if(!empty($json_final['child']))
        {
            foreach($json_final['child'] as $name_data)
            {
                if($name_data['name'] == $arr['year'])
                {
                    $flag=1;

array_push($name_data['child_sub'],array("SI"=>$arr['SI'],"name"=>$arr['name'],"location"=>$arr['location']));
                    array_push($temp, $name_data);
                }
            }
        }
        if($flag == 0)
        {
            array_push($json_final['child'],array("name"=>$arr['year'],"child_sub"=>array(array("SI"=>$arr['SI'],"name"=>$arr['name'],"location"=>$arr['location']))));
        }   
    }
    $json_final['child'] = $temp;
    //print_r($json_final);
    echo json_encode($json_final,true)

    ?>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.