2012-06-29 4 views
0

parentId 필드에 의해 서로 관련이있는 내 테이블 레코드에 있습니다. DB를에서 그들을 가져 오는 때 나는 자식 레코드는 부모 객체의 '아이들'속성에 추가되는 개체의 JSON 배열을 만들어야합니다수동으로 생성 된 중첩 JSON을 PHP 함수를 사용하여 다시 작성하십시오.

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

사용하여이 코드를 더 강력하게 할 수있는 간단한 방법이 있을까요 내장 PHP 그런 fetch_assoc이나 뭐 같은 기능 일부?

+2

['json_encode()'] (http://php.net/manual/en/function.json-encode.php) – PeeHaa

+0

그러나 json_encode를 사용하면이 중첩 된 구조체를 올바르게 가져올 수 없습니까? – DevAno1

+0

@ .devano 왜 안 되니? – PeeHaa

답변

관련 문제