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이나 뭐 같은 기능 일부?
['json_encode()'] (http://php.net/manual/en/function.json-encode.php) – PeeHaa
그러나 json_encode를 사용하면이 중첩 된 구조체를 올바르게 가져올 수 없습니까? – DevAno1
@ .devano 왜 안 되니? – PeeHaa