Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中创建JSON_Php_Json_Phpmyadmin - Fatal编程技术网

在PHP中创建JSON

在PHP中创建JSON,php,json,phpmyadmin,Php,Json,Phpmyadmin,男孩和女孩:)。这是我的问题。 我在数据库中有两个表(用户和注释)。一个用户可以发布一条或多条评论。我想以JSON格式从数据库检索数据。当我检索数据时,我得到如下格式 [{"username":"kurtMarko","message":"Kako si mama"},{"username":"kurtMarko","message":"kako si tata"},{"username":"kurtMarko","message":"kako si brate"},{"username":"k

男孩和女孩:)。这是我的问题。 我在数据库中有两个表(用户和注释)。一个用户可以发布一条或多条评论。我想以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));
}

您想要的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', ....)
);

您必须为其制作不同的阵列,如下所示:

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

也许您必须初始化第一个版本,老实说,您不喜欢的第一个版本实际上是更好的版本

您希望按对象对记录进行分组

如果这些值重复出现,这不是问题,也不会造成伤害

通过删除冗余值来缩短
JSON
字符串可能很有诱惑力,但这将使操作对象更加困难


这就是json(JavaScriptObject符号)的全部要点,在您的示例中,每个注释都代表一个对象,这是一个完美的对象图,不要修改它。

{“Kako si mama”},{“Kako si tata”}
它不是json,您不能通过
json\u encode>创建它。只有用绳子直接操纵才行。@Cherey:接得好。他可能指的是作为字符串数组的元素而不是对象的
“Kako si mama”、“Kako si tat”
。OP您可以确认/拒绝吗?JSON需要一个{key:value}对,因此{key}无效。我希望您的字符串只包含在数组中,例如:
[“Kako si mama”、“Kako si tata”、“Kako si brate”、“Kako si sestro”]
。json库应该能够为您做到这一点。可以将值
[“Kako si mama”、“Kako si tata”、“Kako si brate”、“Kako si sestro”]
设置为带有关键消息的json。如果我放置
$post[“message”]=array()
而不是
$post[“message”]=$row[“message”]
,然后放置foreach循环,我会得到我想要的,但我会得到数据库中的用户名。有没有解决方案可以只获取一个用户名和所有消息?很好,但是如果我想要JSONArray,在那里我可以为该消息的每个消息键都设置JSONArray呢?现在,它打印出了
“消息”:“消息”:[“Kako si mama”、“Kako si tata”、“Kako si brate”、“Kako si sestro”]
。您将在代码中更改什么以打印
“messages:[{“message”:“Kako si mama”},{“message”:“Kako si tata”},{“message”:“Kako si brate”},{“message”:“Kako si sestro”}]
。您有什么想法吗?正如您在这里看到的:,这是工作,可能在$rows数组中有不同之处,请使用print_r()检查!返回null。类似[]。