2014-07-10 5 views
0

This is almost exactly what I want,하지만 그 질문에 대한 답변이 없었으며 1 년이 지났습니다. 나는 가까이 접근 할 수 있었지만, 숫자는 키로 인쇄되고 있다고 생각합니다. 내 예제에서는 47 행에 나타나지만 실제 파일의 모든 "course_name"에 대해 반복됩니다.MySQL에서 중첩 된 JSON

[ 
{ 
    "school_name": "Projects", 
    "terms": [ 
    { 
     "term_name":"category_name#1", 
     "departments": [ 
     { 
      "department_name":"sub_category_name1", 
      "department_code":"category code text here", 
      "courses":[ 
      { 
       "course_name": "project1", 
       "course_code":"project 1 code text goes here", 
       "sections":[ 
       { 
        "section_code":"mike", 
        "unique_id":"[email protected]" 
       }, 
       { 
        "section_code":"dan", 
        "unique_id":"[email protected]" 
       } 
       ] 
      }, 
      { 
       "course_name": "project2", 
       "course_code":"project 2 code text goes here", 
       "sections":[ 
       { 
        "section_code":"steve", 
        "unique_id":"[email protected]" 
       }, 
       { 
        "section_code":"chris", 
        "unique_id":"[email protected]" 
       } 
       ]      
      } 
      ] 
     }, 
     { 
      "department_name": "sub_category_name2", 
      "department_code":"sub category description text goes here..", 
      "courses": { 
-->>>  "69": { 
       "course_name": "project3", 
       "course_code":"project3 code text goes here ", 
       "sections":[ 
        { 
        "section_code":"Alex", 
        "unique_id":"[email protected]" 
        }       
       ]     
       } 
      } 
      } 
      ] 
     } 
     ] 
    } 
    ] 

여기는 내가 사용중인 쿼리와 반환되는 데이터의 예입니다.

SELECT school_name, term_name, department_name, department_code, course_code, course_name, section_code, magento_course_id 
     FROM schools INNER JOIN term_names ON schools.id=term_names.school_id INNER JOIN departments ON schools.id=departments.school_id INNER JOIN 
     adoptions ON departments.id=adoptions.department_id 

"UCA-2" "SPRING 2013" "ACCOUNTING" "ACCT" "3315" "COST ACCOUNTING" "10258" 10311 

이 코드는 내가 생성 한 것입니다.

$row_array = array(); 
$terms = array(); 
$departments = array(); 
$courses = array(); 

$h = 0; 
$i = 0; 
$j = 0; 

while ($row = mysqli_fetch_assoc($fetch)) { 
    $row_array[$row['school_name']]['school_name'] = $row['school_name']; 

    $akey = array_search($row['term_name'], $terms); 
    if ($akey === FALSE) { 
    $m = $h++; 
    $terms[] = $row['term_name']; 
    $row_array[$row['school_name']]['terms'][$m]['term_name'] = $row['term_name']; 
    } else { 
    $m = $akey; 
    } 

    $key = array_search($row['department_code'], $departments); 
    if ($key === FALSE) { 
    $k = $i++; 
    $departments[] = $row['department_code']; 
    $row_array[$row['school_name']]['terms'][$m]['departments'][$k]['department_name'] = $row['department_name']; 
    $row_array[$row['school_name']]['terms'][$m]['departments'][$k]['department_code'] = $row['department_code']; 
    } else { 
    $k = $key; 
    } 

    $skey = array_search($row['course_code'], $courses); 
    if ($skey === FALSE) { 
    $l = $j++; 
    $courses[] = $row['course_code']; 
    $row_array[$row['school_name']]['terms'][$m]['departments'][$k]['courses'][$l]['course_name'] = $row['course_name']; 
    $row_array[$row['school_name']]['terms'][$m]['departments'][$k]['courses'][$l]['course_code'] = $row['course_code']; 
    } else { 
    $l = $skey; 
    } 

    $row_array[$row['school_name']]['terms'][$m]['departments'][$k]['courses'][$l]['sections'][] = array('section_code' => $row['section_code'], 'unique_id' => $row['magento_course_id']); 
} 

어떻게이 숫자가 표시되지 않고이 JSON을 생성합니까?

+0

정확히 무엇을 찾으십니까? 강좌를 큰 키/값 객체 대신 객체의 배열로 만들고 싶습니까? {key : {course}, key2 : {course2}} 대신 [{course}, {course2}]를 사용 하시겠습니까? – tommybananas

+0

나는이 사실을 잘 작성하고, 쿼리와 쿼리에서 반환 된 몇 가지 예제 데이터를 게시한다는 아이디어를 가지고 있습니다. – RiggsFolly

+0

@ snowman4415 내가 출력하려고하는 것은 필자의 예제 46 행까지 패턴입니다. 그것이 패턴이 바뀌는 곳입니다. –

답변

0

& 인코딩 문제가 있다고 생각합니다. 너무 많은 키 사용법, 코드의 과도한 루프. 어쩌면 당신은 SQL 쿼리를 정리해야합니다.

코스의 키를 설정 했으므로 JSON에 표시됩니다.

마지막 줄에서 "[ 'courses'] 뒤에 키를 제거해보십시오.

Change ['courses'][$l] to ['courses'][] 

마지막으로 JSON 용 배열을 인코딩하십시오.

$result = json_encode($result);