【问题标题】:About making JSON tree structure as PHP关于将 JSON 树结构制作为 PHP
【发布时间】:2013-08-25 10:42:46
【问题描述】:

最近我正在将 JSON 类别结构制作为 PHP。 但是,我不是 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":[
                    ]
                }
            ]
        },
    }
}

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

【问题讨论】:

    标签: php json tree structure


    【解决方案1】:

    改一下

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

    喜欢这个

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

    【讨论】:

    • 感谢您的回复。但是,结果不正确。结果如下。 "category":[ { "categoryno":1, "parentno":null, "name":"book", "children":{ "item":{ "categoryno":1, "parentno":null, "name ":"书" } } },
    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多