2014-10-16 2 views
0

안녕 얘들 아 :). 여기 내 문제가있다. 데이터베이스에 두 개의 테이블이 있습니다 (사용자 및 주석). 한 명의 사용자가 하나 이상의 의견을 게시 할 수 있습니다. JSON 형식의 데이터베이스에서 데이터를 검색하려고합니다. 내가 데이터를 가져 오지 때, 나는이PHP에서 JSON 만들기

[{"username":"kurtMarko","message":"Kako si mama"},{"username":"kurtMarko","message":"kako si tata"},{"username":"kurtMarko","message":"kako si brate"},{"username":"kurtMarko","message":"kako si sestro"}] 

같은 형식을 얻을하지만 난 당신이 제안을 어떤 생각을 가지고 있습니까

[{"username":"kurtMarko","message":[{"Kako si mama"},{"kako si tata"},{"kako si brate"},{"kako si sestro"}]] 

같은 데이터를 가져 오지하고자합니다. 모든 의견은 나를 도울 것입니다. 고맙습니다. 내 코드는

require("config.inc.php"); 
$query = "SELECT comments.message, users.username 
      FROM comments 
      LEFT JOIN users ON users.username = comments.username"; 

try { 

    $stmt = $db->prepare($query); 
    $result = $stmt->execute(); 

} catch(PDOException $ex){ 

    $response["success"] = 0; 
    $response["message"] = "Database Error!"; 
    die(json_encode($response)); 

} 

$rows = $stmt->fetchAll(); 
if ($rows) { 
    $response = array(); 
    foreach ($rows as $row) { 
     $post["username"]= $row["username"]; 
     $post["message"] = $row["message"]; 
     array_push($response, $post); 
    } 
    echo json_encode($response); 
} else { 
    $response["success"] = 0; 
    $response["message"] = "No Post Available!"; 
    die(json_encode($response)); 
} 
+2

'{ "Kako si mama"}, { "kako si tata"}'json이 아니며'json_encode'로 만들 수 없습니다. 문자열을 사용한 직접 조작 만 가능합니다. – Cheery

+0

@Cheery 잘 잡으세요. 그는 아마도 "Kako si mama", "kako si tat"를 문자열 배열의 요소로, 객체가 아닌 의미로 사용했습니다. OP는 당신을 확인/거절 할 수 있습니까? – thatidiotguy

+0

JSON에 {key : value} 쌍이 필요하므로 {key}가 유효하지 않습니다. 나는 당신의 끈을 배열로만 가질 것입니다.'' "Kako si mama", "kako si tata", "kako si brate", "kako si sestro"]'. json 라이브러리가이를 수행 할 수 있어야합니다. – NuclearPeon

답변

1

:

$response = array(); 
foreach ($rows as $row) { 
    $response[$row["username"]]['message'][] = $row["message"] 
} 
echo json_encode($response); 

어쩌면 당신이 초기화해야 첫 번째

+0

좋은데, 내가 그 메시지의 모든 메시지 키에 대해 가질 JSONArray를 원한다면? 이제는 "message"를 출력합니다 : "message": [ "Kako si mama", "kako si tata", "kako si brate", "kako si sestro"]'. 메시지를 인쇄하기 위해 코드에서 바꿀 내용 : [{ "message": "Kako si mama"}, { "message": "kako si tata"}, { "message": "kako si brate"}, "message": "kako si sestro"}]'당신은 어떤 생각이 있습니까? –

+0

여기에서 볼 수 있듯이 http : // ideone.co.kr/fork/Mx3qGq, 그것의 작품, 어쩌면 당신의 $ rows 배열에 다른 뭔가가있다, 체크 아웃 print_r()를 사용! –

0

원하는 DB 구조로 인해 어려움이 있습니다. 사용자 이름은 배열의 키가 아니기 때문에 특정 사용자 이름이 어디인지 찾기 위해 반복해서 배열 전체를 검색해야합니다. 그러면 해당 사용자 아래에 새 메시지를 추가 할 수 있습니다. 왜 대신이 없습니다 :

$arr = array(); 
foreach($rows as $row) { 
    $user = $row['username']; 
    $msg = $row['message']; 
    $arr[$user][] = $msg; 
} 

당신을 줄 것이다 그 :

당신은 다음과 같은 것을 위해 다른 배열을해야
Array (
    'Fred' => array('msg1', 'msg2', 'msg3'); 
    'Susie' => array('msg4', 'msg5', ....) 
); 
+0

은 null을 반환합니다. []와 같은 것. –

0

솔직히 말해서 좋지 않은 첫 번째 버전은 실제로 더 좋은 버전입니다.

개체를 기준으로 레코드를 그룹화하려고합니다.

값을 반복하면 문제가되지 않으며 문제가되지 않습니다.

중복 값을 제거하여 JSON 문자열을 줄이는 것이 유혹적 일 수 있지만 이로 인해 개체를 조작하기가 더 어려워 질 수 있습니다.

이것은 JavaScript (JavaScript 표기법 표기법)의 전체 요점입니다. 예제에서 각 주석은 객체를 나타내며 완벽한 객체 그래프입니다. 수정하지 마십시오.