重写手动创建的嵌套JSON以使用PHPs内置函数
我的表中有通过parentId字段彼此关联的记录。当从DB中提取它们时,我需要创建对象的JSON数组,其中子记录被添加到父对象的“children”属性中:重写手动创建的嵌套JSON以使用PHPs内置函数,php,mysql,json,Php,Mysql,Json,我的表中有通过parentId字段彼此关联的记录。当从DB中提取它们时,我需要创建对象的JSON数组,其中子记录被添加到父对象的“children”属性中: [{ //main object children : [ { //#1st level children object children: [ { //#2nd level childre
[{
//main object
children : [
{
//#1st level children object
children: [
{
//#2nd level children object
}
]
}
]
},
{
(...)
]
但如果没有parentId等于当前记录的记录,则不应将此属性添加到对象中
现在我正在手动构建JSON字符串:
//first get the parents
$q = 'SELECT * FROM table WHERE parentId = 0';
$r = mysql_query($q);
$x=1;
$nr = mysql_num_rows($r);
while($e = mysql_fetch_array($r)){
if($x==1){
echo '[ { ';
}
else{
echo ' { ';
}
if($e['leaf']==1){
$leaf = 'true';
} else {
$leaf = 'false';
}
echo '"EndDate" : "'.str_replace('T00:00:00','',$e['EndDate']).'",
"Id" : '.$e['Id'].',
"Name" : "'.$e['Name'].'",
"BaselineStartDate" : "'.str_replace('T00:00:00','',$e['BaselineStartDate']).'"';
if($leaf){
echo ',"leaf": '.$leaf.'';
}
childs($e['Id'], $x, $nr);
if($x<$nr){
echo ',';
}
$x++;
}
if($x>1){
echo ']';
}
function childs($id, $x, $nr, $x2='', $nr2=''){
//now see if there are childern
$q2 = 'SELECT * FROM table WHERE parentId = "'.$id.'" ';
$r2 = mysql_query($q2);
$nr2 = mysql_num_rows($r2);
if($nr2>0){
echo ',"children": [ ';
$x2 =1;
while($e2 = mysql_fetch_array($r2)){
if($e2['leaf']==1){
$leaf2 = 'true';
}
else{
$leaf2 = 'false';
}
echo '{
"EndDate" : "'.str_replace('T00:00:00','',$e2['EndDate']).'",
"Id" : '.$e2['Id'].',
"Name" : "'.$e2['Name'].'",
"BaselineStartDate" : "'.str_replace('T00:00:00','',$e2['BaselineStartDate']).'",
"leaf" : "'.$leaf2.'"';
childs($e2['Id'],$x,$nr,'',$x2,$nr2);
if($x2<$nr2){
echo ',';
}
$x2++;
}
echo '] }';
}
else{
echo ',"children" : []}';
}
}
//首先得到父母
$q='从parentId=0'的表中选择*;
$r=mysql\u查询($q);
$x=1;
$nr=mysql\u num\u行($r);
而($e=mysql\u fetch\u数组($r)){
如果($x==1){
回声'[{';
}
否则{
回声{};
}
如果($e['leaf']==1){
$leaf='true';
}否则{
$leaf='false';
}
echo“EndDate”:“.str_replace('T00:00:00’,”$e['EndDate'])”,
“Id”:“$e['Id']”,
“名称”:“'.$e['Name']”,
“BaselineStartDate”:“.str_替换('T00:00:00’,”$e['BaselineStartDate')”;
如果($leaf){
echo',“leaf”:“$leaf.”;
}
儿童($e['Id',$x,$nr);
如果有的话(1美元){
回声']';
}
函数child($id,$x,$nr,$x2='',$nr2=''){
//现在看看有没有孩子
$q2='从parentId=“.”.$id.“”所在的表中选择*;
$r2=mysql\U查询($q2);
$nr2=mysql\u num\u行($r2);
如果($nr2>0){
echo',“children”:[';
$x2=1;
而($e2=mysql\u fetch\u数组($r2)){
如果($e2['leaf']==1){
$leaf2='true';
}
否则{
$leaf2='false';
}
回声'{
“结束日期”:“.str_替换('T00:00:00’,”$e2['EndDate'])”,
“Id”:“..$e2['Id']”,
“名称”:“'.$e2['Name']”,
“BaselineStartDate”:“.str_替换('T00:00:00’,”$e2['BaselineStartDate')”,
“叶”:“.$leaf2.”;
儿童($e2['Id'],$x,$nr,,$x2,$nr2);
如果($x2你应该
从数据库中获取结果
根据要求重新格式化(相关代码可稍加修改后使用
最后,json_对结果数组进行编码
.但是使用json_encode我将无法正确地得到这个嵌套结构?非常简单的示例:是的,但您假设已经添加了子项。如果您查看代码,我正在执行查询,如果记录的id/parentId匹配,则向子项数组添加元素。是的:为什么需要多个查询来获取该数据?