2014-10-16 55 views
0

Hy男孩和女孩:)。這是我的問題。 我有兩個表在數據庫(用戶和評論)。一位用戶可以發佈1條或更多評論。我想從JSON格式的數據庫中檢索數據。當我retrive數據,我得到這樣在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 2014-10-16 20:12:22

+0

@Cheery很好。他可能是指「Kako si mama」,「kako si tat」作爲字符串數組的元素,而不是對象。 OP你可以確認/否認? – thatidiotguy 2014-10-16 20:13:32

+0

JSON需要一個{key:value}對,所以{key}無效。我只會將你的字符串放在一個數組中,例如:[[「Kako si mama」,「kako si tata」,「kak si si brate」,「kako si sestro」]'。一個json庫應該能夠爲你做到這一點。 – NuclearPeon 2014-10-16 20:14:01

回答

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」,「kak si si brate」,「kako si sestro」]'。你將在代碼中改變以打印'「消息:[{」message「:」Kako si mama「},{」message「:」kako si tata「},{」message「:」kako si brate「},{ 「message」:「kako si sestro」}]'。你有什麼想法嗎? – 2014-10-16 21:17:49

+0

正如你可以在這裏看到的:http:// ideone。com/fork/Mx3qGq,這是可行的,也許你的$ rows數組有些不同,使用print_r()來檢出! – 2014-10-17 00:05:58

0

你所需DB結構使這個困難。由於用戶名不是數組中的鍵,因此您必須重複搜索整個數組以找到WHERE特定用戶名,以便您可以在該用戶下附加新消息。爲什麼沒有這個來代替:

$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。像[]一樣。 – 2014-10-16 21:21:54

0

老實說,你不喜歡的第一個版本實際上是更好的。

您想按對象分組記錄。

如果重複的值不是問題,它不會傷害。

刪除多餘的值可能會使您的JSON字符串縮短,但這會使操作對象變得更加困難。

這是json的全部要點(JavaScript 對象符號),在您的示例中,每個註釋都代表一個對象,並且這是一個完美的對象圖形,請不要修改它。