Recently I was making JSON category structure as PHP. but, I'm not php programmer. so, I couldn't make it well.
There is my php source below.
<?php
header('Content-Type: application/json; charset=utf-8');
$data = array(
array('categoryno' => 1, 'parentno' => null, 'name' => urlencode('book')),
array('categoryno' => 2, 'parentno' => 1, 'name' => urlencode('science')),
array('categoryno' => 3, 'parentno' => 1, 'name' => urlencode('medical')),
array('categoryno' => 4, 'parentno' => 2, 'name' => urlencode('physics')),
array('categoryno' => 5, 'parentno' => 3, 'name' => urlencode('medicine')),
array('categoryno' => 6, 'parentno' => null, 'name' => urlencode('game')),
array('categoryno' => 7, 'parentno' => 6, 'name' => urlencode('fantasy')),
);
$itemArray = array();
foreach($data as $key => &$item)
{
$itemArray[$item['categoryno']] = &$item;
$itemArray[$item['categoryno']]['children'] = array();
$itemArray[$item['categoryno']] = Array('item' => $itemArray[$item['categoryno']]);
if($item['item']['parentno'] && isset($itemArray[$item['item']['parentno']]))
{
$itemArray[$item['item']['parentno']]['children'][] = &$item;
}
if($item['item']['parentno'] && isset($itemArray[$item['item']['parentno']]))
{
unset($data[$key]);
}
}
$json = json_encode(Array('category' => $data));
echo urldecode($json);
?>
And this is current result.
{
"category":{
"0":{
"item":{
"categoryno":1,
"parentno":null,
"name":"book",
"children":[
]
},
"children":[
{
"item":{
"categoryno":2,
"parentno":1,
"name":"science",
"children":[
]
},
"children":[
{
"item":{
"categoryno":4,
"parentno":2,
"name":"physics",
"children":[
]
}
}
]
},
{
"item":{
"categoryno":3,
"parentno":1,
"name":"medical",
"children":[
]
},
"children":[
{
"item":{
"categoryno":5,
"parentno":3,
"name":"medicine",
"children":[
]
}
}
]
}
]
},
"5":{
"item":{
"categoryno":6,
"parentno":null,
"name":"game",
"children":[
]
},
"children":[
{
"item":{
"categoryno":7,
"parentno":6,
"name":"fantasy",
"children":[
]
}
}
]
}
}
But, I want to making the result like as below.
{
"category":{
"item":{
"categoryno":1,
"parentno":null,
"name":"book",
"children":[
"item":{
"categoryno":2,
"parentno":1,
"name":"science",
"children":[
"item":{
"categoryno":4,
"parentno":2,
"name":"physics",
"children":[
]
}
]
},
"item":{
"categoryno":3,
"parentno":1,
"name":"medical",
"children":[
"item":{
"categoryno":5,
"parentno":3,
"name":"medicine",
"children":[
]
}
]
},
]
},
"item":{
"categoryno":6,
"parentno":null,
"name":"game",
"children":[
"item":{
"categoryno":7,
"parentno":6,
"name":"fantasy",
"children":[
]
}
]
},
}
}
How can I fix my code? Could you please help me?
Change that
$itemArray[$item['categoryno']]['children'] = array();
$itemArray[$item['categoryno']] = Array('item' => $itemArray[$item['categoryno']]);
like this
$itemArray[$item['categoryno']]['children'] = Array('item' => $itemArray[$item['categoryno']]);