2011-11-06 2 views
3

좋은 오후, json 객체로 인코딩하여 클라이언트에 보낼 수 있도록 이러한 결과를 PHP의 배열로 가져 오려고합니다. 쿼리의 결과는 다음과 같습니다 :PHP를 사용하여 json에 mysql. 중첩 된 객체

{ "id": "3bf", "name": "JFK Int", "cats": 
    { [ { "cat": "pass", "status": "open" }, 
     { "cat": "std", "status": "closed" }, 
     { "cat": "exp", "status": "open" } ] } 
{ "id": "5t6", "name": "Ohm CA", "cats": 
    { [ { "cat": "pass", "status": "closed" }, 
     { "cat": "std", "status": "closed" }, 
     { "cat": "std2", "status": "open" } ], 
     { "cat": "exp", "status": "open" } ] } 

내가 성공적으로 MySQL을 연결하고 평평한 테이블을 사용하여로 json_encode를 사용하여 내 보낸 있지만 : json으로 개체를 같이하는

id name hours cat status 
3bf JFK Int 24 pass open 
3bf JFK Int 24 std closed 
3bf JFK Int 24 exp open 
5t6 Ohm CA 18 pass closed 
5t6 Ohm CA 18 std closed 
5t6 Ohm CA 18 std2 open 
5t6 Ohm CA 18 exp open 
... 

내가 좋아하는 것 부분 나는 PHP에서하는 방법을 모른다. 감사.

이것은 내가 가지고있는 코드입니다. 이 JSON 객체의 배열을 반환하지만, 중첩되지 평평하다 :

$SQL = "SELECT id, name, hours, cat, status FROM bwt.vewPortCats"; 

$result = mysql_query($SQL); 

$arr = array(); 
    while ($row = mysql_fetch_assoc($result)) { 
     $arr[] = $row;} 

$json = json_encode($arr); 

echo $json; 

데이터 자체는 테이블 포트와 고양이를 결합하는보기에서이다.

+2

PHP 코드를 알려주시겠습니까? mysql에서 데이터를 추출하는 여러 가지 방법이 있으며 솔루션은 가지고있는 항목에 따라 다릅니다 (IE mysqli, pdo ...). 아마 할 수있는 일은 foreach를 사용하여 "외부"요소를 반복하고, 내부 구성 요소를 다시 반복하는 것입니다 (동일한 구문). 출력으로 다차원 배열을 가지고 있습니다. json_encode를 사용하여 JSON으로 변환 할 수 있습니다. – maraspin

+1

id 및 name에 대한 쿼리에서 group을 사용하고 category에 대한 배열 객체를 얻기 위해 group_concat을 사용합니다. 예제를 제공 할 수 있도록 SQL을 제공하십시오 – bensiu

+1

good maraspin의 의견. 코드 예제 등을 보려면 http://php.net/manual/en/function.json-encode.php를 확인하십시오. – supertopi

답변

9

이 같은 (나는 여전히 요점을 전달하는 희망)이다 (미안하지 최고의 코드가 나는 시간, 아이디어, 에너지 부족 ... 쓸 수 ;-) 무엇을 할 수 있는지 :

$SQL = "SELECT id, name, hours, cat, status FROM bwt.vewPortCats"; 

$result = mysql_query($SQL); 

$arr = array(); 
    while ($row = mysql_fetch_assoc($result)) { 

     // You're going to overwrite these at each iteration, but who cares ;-) 
     $arr[$row['id']]['id'] = $row['id']; 
     $arr[$row['id']]['name'] = $row['name']; 

     // You add the new category 
     $temp = array('cat' => $row['cat'], 'status' => $row['status']); 

     // New cat is ADDED 
     $arr[$row['id']]['cats'][] = $temp; 
    } 


$base_out = array(); 

// Kind of dirty, but doesn't hurt much with low number of records 
foreach ($arr as $key => $record) { 
    // IDs were necessary before, to keep track of ports (by id), 
    // but they bother json now, so we do... 
    $base_out[] = $record; 
} 

$json = json_encode($base_out); 

echo $json; 

두 번이나 테스트하거나 생각할 시간이 없었지만 아이디어가 전달되기를 바랍니다.

+1

놀랍습니다. 나는 시간, 에너지 및 아이디어가있을 때 당신이 할 수있는 것이 무엇인지조차 알지 못합니다. 그러나 이것은 잘되었습니다. 나는 대답으로 받아 들일 것이지만 편집 권한이 없기 때문에 $ arr [row는 $ arr [$ row]이어야한다. 또한 json 객체에서 침을 뱉어 내기 위해 $ temp = array ($ row [ 'cat'], $ row [ 'status'])를 변경했습니다. $ temp = array ("cat"=> $ row [ 'cat'], "status"=> $ row [ 'status']); – jangeador

+1

당신은 바로 @jangeador입니다. 그 오타를 유감스럽게 생각합니다. 다행스러운 해결책이 당신을 위해 이루어졌습니다. – maraspin