Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中创建数组以形成以下json结构_Php_Arrays_Json_Recursion - Fatal编程技术网

如何在php中创建数组以形成以下json结构

如何在php中创建数组以形成以下json结构,php,arrays,json,recursion,Php,Arrays,Json,Recursion,我想通过代码创建以下JSON字符串。创建数组,然后使用json\u encode将其转换为字符串的最简单方法。如何生成数组?递归数组应该是一个很好的解决方案。您能帮我修复以下阵列吗 function getJSONString(){ echo generateJSONArray($currentnode); } function generateJSONArray($currentnode){ $jsonarr["id"] = $currentnode[0]->id;

我想通过代码创建以下JSON字符串。创建数组,然后使用
json\u encode
将其转换为字符串的最简单方法。如何生成数组?递归数组应该是一个很好的解决方案。您能帮我修复以下阵列吗

function getJSONString(){
  echo generateJSONArray($currentnode);
}

function generateJSONArray($currentnode){
    $jsonarr["id"] =  $currentnode[0]->id; 
    $jsonarr["name"] = $currentnode[0]->name;
    $jsonarr["data"] = "{}";
    $childnodes = getChildNodes($currentnode); //gives child nodes 
    foreach($childnodes as $childnode){
        $jsonarr["children"] = $this->generateJSONArray($childnode);
    }   
      return json_encode($jsonarr);
}
希望生成以下JSON字符串

var json = {
    id: "node02",
    name: "0.2",
    data: {},
    children: [{
        id: "node13",
        name: "1.3",
        data: {},
        children: [{
            id: "node24",
            name: "2.4",
            data: {},
            children: [{
                id: "node35",
                name: "3.5",
                data: {},
                children: [{
                    id: "node46",
                    name: "4.6",
                    data: {},
                    children: []
                }]
            }, {
                id: "node37",
                name: "3.7",
                data: {},
                children: [{
                    id: "node48",
                    name: "4.8",
                    data: {},
                    children: []
                }, {
                    id: "node49",
                    name: "4.9",
                    data: {},
                    children: []
                }, {
                    id: "node410",
                    name: "4.10",
                    data: {},
                    children: []
                }, {
                    id: "node411",
                    name: "4.11",
                    data: {},
                    children: []
                }]
            }, {
                id: "node312",
                name: "3.12",
                data: {},
                children: [{
                    id: "node413",
                    name: "4.13",
                    data: {},
                    children: []
                }]
            }, {
                id: "node314",
                name: "3.14",
                data: {},
                children: [{
                    id: "node415",
                    name: "4.15",
                    data: {},
                    children: []
                }, {
                    id: "node416",
                    name: "4.16",
                    data: {},
                    children: []
                }, {
                    id: "node417",
                    name: "4.17",
                    data: {},
                    children: []
                }, {
                    id: "node418",
                    name: "4.18",
                    data: {},
                    children: []
                }]
            }, {
                id: "node319",
                name: "3.19",
                data: {},
                children: [{
                    id: "node420",
                    name: "4.20",
                    data: {},
                    children: []
                }, {
                    id: "node421",
                    name: "4.21",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node222",
            name: "2.22",
            data: {},
            children: [{
                id: "node323",
                name: "3.23",
                data: {},
                children: [{
                    id: "node424",
                    name: "4.24",
                    data: {},
                    children: []
                }]
            }]
        }]
    }, {
        id: "node125",
        name: "1.25",
        data: {},
        children: [{
            id: "node226",
            name: "2.26",
            data: {},
            children: [{
                id: "node327",
                name: "3.27",
                data: {},
                children: [{
                    id: "node428",
                    name: "4.28",
                    data: {},
                    children: []
                }, {
                    id: "node429",
                    name: "4.29",
                    data: {},
                    children: []
                }]
            }, {
                id: "node330",
                name: "3.30",
                data: {},
                children: [{
                    id: "node431",
                    name: "4.31",
                    data: {},
                    children: []
                }]
            }, {
                id: "node332",
                name: "3.32",
                data: {},
                children: [{
                    id: "node433",
                    name: "4.33",
                    data: {},
                    children: []
                }, {
                    id: "node434",
                    name: "4.34",
                    data: {},
                    children: []
                }, {
                    id: "node435",
                    name: "4.35",
                    data: {},
                    children: []
                }, {
                    id: "node436",
                    name: "4.36",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node237",
            name: "2.37",
            data: {},
            children: [{
                id: "node338",
                name: "3.38",
                data: {},
                children: [{
                    id: "node439",
                    name: "4.39",
                    data: {},
                    children: []
                }, {
                    id: "node440",
                    name: "4.40",
                    data: {},
                    children: []
                }, {
                    id: "node441",
                    name: "4.41",
                    data: {},
                    children: []
                }]
            }, {
                id: "node342",
                name: "3.42",
                data: {},
                children: [{
                    id: "node443",
                    name: "4.43",
                    data: {},
                    children: []
                }]
            }, {
                id: "node344",
                name: "3.44",
                data: {},
                children: [{
                    id: "node445",
                    name: "4.45",
                    data: {},
                    children: []
                }, {
                    id: "node446",
                    name: "4.46",
                    data: {},
                    children: []
                }, {
                    id: "node447",
                    name: "4.47",
                    data: {},
                    children: []
                }]
            }, {
                id: "node348",
                name: "3.48",
                data: {},
                children: [{
                    id: "node449",
                    name: "4.49",
                    data: {},
                    children: []
                }, {
                    id: "node450",
                    name: "4.50",
                    data: {},
                    children: []
                }, {
                    id: "node451",
                    name: "4.51",
                    data: {},
                    children: []
                }, {
                    id: "node452",
                    name: "4.52",
                    data: {},
                    children: []
                }, {
                    id: "node453",
                    name: "4.53",
                    data: {},
                    children: []
                }]
            }, {
                id: "node354",
                name: "3.54",
                data: {},
                children: [{
                    id: "node455",
                    name: "4.55",
                    data: {},
                    children: []
                }, {
                    id: "node456",
                    name: "4.56",
                    data: {},
                    children: []
                }, {
                    id: "node457",
                    name: "4.57",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node258",
            name: "2.58",
            data: {},
            children: [{
                id: "node359",
                name: "3.59",
                data: {},
                children: [{
                    id: "node460",
                    name: "4.60",
                    data: {},
                    children: []
                }, {
                    id: "node461",
                    name: "4.61",
                    data: {},
                    children: []
                }, {
                    id: "node462",
                    name: "4.62",
                    data: {},
                    children: []
                }, {
                    id: "node463",
                    name: "4.63",
                    data: {},
                    children: []
                }, {
                    id: "node464",
                    name: "4.64",
                    data: {},
                    children: []
                }]
            }]
        }]
    }, {
        id: "node165",
        name: "1.65",
        data: {},
        children: [{
            id: "node266",
            name: "2.66",
            data: {},
            children: [{
                id: "node367",
                name: "3.67",
                data: {},
                children: [{
                    id: "node468",
                    name: "4.68",
                    data: {},
                    children: []
                }, {
                    id: "node469",
                    name: "4.69",
                    data: {},
                    children: []
                }, {
                    id: "node470",
                    name: "4.70",
                    data: {},
                    children: []
                }, {
                    id: "node471",
                    name: "4.71",
                    data: {},
                    children: []
                }]
            }, {
                id: "node372",
                name: "3.72",
                data: {},
                children: [{
                    id: "node473",
                    name: "4.73",
                    data: {},
                    children: []
                }, {
                    id: "node474",
                    name: "4.74",
                    data: {},
                    children: []
                }, {
                    id: "node475",
                    name: "4.75",
                    data: {},
                    children: []
                }, {
                    id: "node476",
                    name: "4.76",
                    data: {},
                    children: []
                }]
            }, {
                id: "node377",
                name: "3.77",
                data: {},
                children: [{
                    id: "node478",
                    name: "4.78",
                    data: {},
                    children: []
                }, {
                    id: "node479",
                    name: "4.79",
                    data: {},
                    children: []
                }]
            }, {
                id: "node380",
                name: "3.80",
                data: {},
                children: [{
                    id: "node481",
                    name: "4.81",
                    data: {},
                    children: []
                }, {
                    id: "node482",
                    name: "4.82",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node283",
            name: "2.83",
            data: {},
            children: [{
                id: "node384",
                name: "3.84",
                data: {},
                children: [{
                    id: "node485",
                    name: "4.85",
                    data: {},
                    children: []
                }]
            }, {
                id: "node386",
                name: "3.86",
                data: {},
                children: [{
                    id: "node487",
                    name: "4.87",
                    data: {},
                    children: []
                }, {
                    id: "node488",
                    name: "4.88",
                    data: {},
                    children: []
                }, {
                    id: "node489",
                    name: "4.89",
                    data: {},
                    children: []
                }, {
                    id: "node490",
                    name: "4.90",
                    data: {},
                    children: []
                }, {
                    id: "node491",
                    name: "4.91",
                    data: {},
                    children: []
                }]
            }, {
                id: "node392",
                name: "3.92",
                data: {},
                children: [{
                    id: "node493",
                    name: "4.93",
                    data: {},
                    children: []
                }, {
                    id: "node494",
                    name: "4.94",
                    data: {},
                    children: []
                }, {
                    id: "node495",
                    name: "4.95",
                    data: {},
                    children: []
                }, {
                    id: "node496",
                    name: "4.96",
                    data: {},
                    children: []
                }]
            }, {
                id: "node397",
                name: "3.97",
                data: {},
                children: [{
                    id: "node498",
                    name: "4.98",
                    data: {},
                    children: []
                }]
            }, {
                id: "node399",
                name: "3.99",
                data: {},
                children: [{
                    id: "node4100",
                    name: "4.100",
                    data: {},
                    children: []
                }, {
                    id: "node4101",
                    name: "4.101",
                    data: {},
                    children: []
                }, {
                    id: "node4102",
                    name: "4.102",
                    data: {},
                    children: []
                }, {
                    id: "node4103",
                    name: "4.103",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node2104",
            name: "2.104",
            data: {},
            children: [{
                id: "node3105",
                name: "3.105",
                data: {},
                children: [{
                    id: "node4106",
                    name: "4.106",
                    data: {},
                    children: []
                }, {
                    id: "node4107",
                    name: "4.107",
                    data: {},
                    children: []
                }, {
                    id: "node4108",
                    name: "4.108",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node2109",
            name: "2.109",
            data: {},
            children: [{
                id: "node3110",
                name: "3.110",
                data: {},
                children: [{
                    id: "node4111",
                    name: "4.111",
                    data: {},
                    children: []
                }, {
                    id: "node4112",
                    name: "4.112",
                    data: {},
                    children: []
                }]
            }, {
                id: "node3113",
                name: "3.113",
                data: {},
                children: [{
                    id: "node4114",
                    name: "4.114",
                    data: {},
                    children: []
                }, {
                    id: "node4115",
                    name: "4.115",
                    data: {},
                    children: []
                }, {
                    id: "node4116",
                    name: "4.116",
                    data: {},
                    children: []
                }]
            }, {
                id: "node3117",
                name: "3.117",
                data: {},
                children: [{
                    id: "node4118",
                    name: "4.118",
                    data: {},
                    children: []
                }, {
                    id: "node4119",
                    name: "4.119",
                    data: {},
                    children: []
                }, {
                    id: "node4120",
                    name: "4.120",
                    data: {},
                    children: []
                }, {
                    id: "node4121",
                    name: "4.121",
                    data: {},
                    children: []
                }]
            }, {
                id: "node3122",
                name: "3.122",
                data: {},
                children: [{
                    id: "node4123",
                    name: "4.123",
                    data: {},
                    children: []
                }, {
                    id: "node4124",
                    name: "4.124",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node2125",
            name: "2.125",
            data: {},
            children: [{
                id: "node3126",
                name: "3.126",
                data: {},
                children: [{
                    id: "node4127",
                    name: "4.127",
                    data: {},
                    children: []
                }, {
                    id: "node4128",
                    name: "4.128",
                    data: {},
                    children: []
                }, {
                    id: "node4129",
                    name: "4.129",
                    data: {},
                    children: []
                }]
            }]
        }]
    }, {
        id: "node1130",
        name: "1.130",
        data: {},
        children: [{
            id: "node2131",
            name: "2.131",
            data: {},
            children: [{
                id: "node3132",
                name: "3.132",
                data: {},
                children: [{
                    id: "node4133",
                    name: "4.133",
                    data: {},
                    children: []
                }, {
                    id: "node4134",
                    name: "4.134",
                    data: {},
                    children: []
                }, {
                    id: "node4135",
                    name: "4.135",
                    data: {},
                    children: []
                }, {
                    id: "node4136",
                    name: "4.136",
                    data: {},
                    children: []
                }, {
                    id: "node4137",
                    name: "4.137",
                    data: {},
                    children: []
                }]
            }]
        }, {
            id: "node2138",
            name: "2.138",
            data: {},
            children: [{
                id: "node3139",
                name: "3.139",
                data: {},
                children: [{
                    id: "node4140",
                    name: "4.140",
                    data: {},
                    children: []
                }, {
                    id: "node4141",
                    name: "4.141",
                    data: {},
                    children: []
                }]
            }, {
                id: "node3142",
                name: "3.142",
                data: {},
                children: [{
                    id: "node4143",
                    name: "4.143",
                    data: {},
                    children: []
                }, {
                    id: "node4144",
                    name: "4.144",
                    data: {},
                    children: []
                }, {
                    id: "node4145",
                    name: "4.145",
                    data: {},
                    children: []
                }, {
                    id: "node4146",
                    name: "4.146",
                    data: {},
                    children: []
                }, {
                    id: "node4147",
                    name: "4.147",
                    data: {},
                    children: []
                }]
            }]
        }]
    }]
};
编辑:--------------------------------------------------------------

我尝试了上面的代码,并给出了以下建议,但现在JSON字符串的值为“null”,并且我的子数组总是空的。我想,这背后的原因是递归数组不返回任何内容。然而,我不确定在哪里添加return子句

更正代码:

function getJSONString(){
    echo json_encode($this->generateJSONArray($currentrole)); // this echo null
}

function generateJSONArray($currentrole){
    $jsonarr = array();
    $jsonarr["id"] =  $currentnode[0]->id; 
            $jsonarr["name"] = $currentnode[0]->name;
            $jsonarr["data"] = "";
    $childnodes = getChildNodes($currentnode); //gives child nodes 
    $jsonarr['children'] = array();
    foreach($childnodes as $childnode){
        $jsonarr["children"][] = $this->generateJSONArray($childnode);
    }   
    print_r($jsonarr); // to see what the array looks like
}
决议: 数组([id]=>H3-7[name]=>testuser 副总裁
[data]=>[children]=>数组([0]=>[1]=>[2]=>)

从代码的外观来看,您可能会得到许多已多次编码的子项。您应该只在complete数组上运行一次
json\u encode

因此,不要每次都返回
json\u encode
,而是返回一个数组:

return $jsonarr; // instead of return json_encode($jsonarr);
然后在getJSONString中,进行
json\u编码

function getJSONString(){
  echo json_encode(generateJSONArray($currentnode));
}
编辑:您还有另一个问题,您的“孩子”不正确。这只会将子项设置为最后一个子项,而不是您想要的集合

$jsonarr["children"] = $this->generateJSONArray($childnode);
首先要将“children”设置为数组,然后附加该数组:

$jsonarr['children'] = [];
foreach($childnodes as $childnode){
    $jsonarr['children'][] = $this->generateJSONArray($childnode);
}
另外,
$jsonarr[“数据”]=“{}”将作为字符串转义。通过执行以下操作使其成为空对象:

$jsonarr["data"] = new stdClass();

或者,您也可以通过键入一个空数组来实现。不过,我只建议您添加一个键并将其用作数组。

如果您只是
json\u encode($rootNode)?不确定。我会尝试一下,但我想,真正的挑战是如何正确地实现递归循环。我不确定我的循环是否有效。谢谢你的快速回答。这是有道理的。尽管如此,您认为我的递归循环正确吗?我不确定我是否正确。有什么想法吗。