2013-08-25 57 views
0

最近我做了JSON类结构为PHP。 但是,我不是PHP程序员。所以,我做不好。关于制作JSON树结构为PHP

下面是我的php源代码。

<?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); 
?> 

而这是当前结果。

{ 
    "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":[ 
         ] 
        } 
       } 
      ] 
     } 
} 

但是,我想做出如下结果。

{ 
    "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":[ 
        ] 
       } 
      ] 
     }, 
    } 
} 

我该如何修复我的代码? 你能帮我吗?

回答

0

变化是

$itemArray[$item['categoryno']]['children'] = array(); 

$itemArray[$item['categoryno']] = Array('item' => $itemArray[$item['categoryno']]); 

这样

$itemArray[$item['categoryno']]['children'] = Array('item' => $itemArray[$item['categoryno']]); 
+0

谢谢您的答复。但是,结果不正确。 结果如下。 “类别”: { “categoryno”:1, “parentno”:空, “名”: “书”, “孩子”:{ “项目”:{ “categoryno”:1 , “parentno”:null, “name”:“book” } } }, – netcleaner