【问题标题】:Grouping JSON output according to specific mysql column根据特定的 mysql 列对 JSON 输出进行分组
【发布时间】:2015-08-24 14:00:16
【问题描述】:

我有一个 mysql 表 (name:"messages"),它有如下三列:

messageID、fromUserID、内容

我希望使用以下格式的 php 脚本输出 json;我需要分离每个用户的消息(fromUserID 列)。

JSON 输出:

{
"newCount":"x",
"messages":
[
    {
        "fromUserID":"x",
        "messagesArray":
        [
            {"messageID":"x","content":"xxx"},
            {"messageID":"x","content":"xxx"},
            {"messageID":"x","content":"xxx"}                
        ]
    },
    {
        "fromUserID":"y",
        "messagesArray":
        [
            {"messageID":"x","content":"xxx"},
            {"messageID":"x","content":"xxx"},
            {"messageID":"x","content":"xxx"}                
        ]
    },
    {
        "fromUserID":"z",
        "messagesArray":
        [
            {"messageID":"x","content":"xxx"},
            {"messageID":"x","content":"xxx"},
            {"messageID":"x","content":"xxx"}                
        ]
    }
]
}

我的 PHP 脚本:

$query = mysqli_query($con,"SELECT * FROM messages ORDER BY fromUserID");

$outputArray = array();

$outputArray['hasNew'] = mysqli_num_rows($query);

$messagesArray = array();

if($query)
{
    while($row = mysqli_fetch_assoc($query))
    {
        $MSGArray = array();
        $messagesArray['fromUserID'] = $row['fromUserID'];
        $MSGArray['messageID'] = $row['messageID'];
        $MSGArray['content'] = $row['content'];
        $messagesArray['MessagesArray'][] = $MSGArray;      
    }
    $outputArray['Messages'][] = $messagesArray;
}

echo json_encode($outputArray);

但是使用上面的脚本我给出了一个错误的结果如下:

{
"hasNew":6,
"Messages":
[
 {
  "fromUserID":"24",
  "MessagesArray":
  [
   {"messageID":"4","content":"test"},
   {"messageID":"3","content":"test"}, 
   {"messageID":"6","content":"test"},
   {"messageID":"5","content":"test"},
   {"messageID":"1","content":"test"},
   {"messageID":"2","content":"test"}
  ]
 }
]
}

我的 PHP 脚本只使用最后一个 fromUserID 值来分组消息!!!

请让我知道我错在哪里......

【问题讨论】:

  • 这种结构不适合这种事情。您将应该作为键的内容存储为值,这意味着您必须搜索整个主数组才能找到需要插入新数据的位置。
  • @MarcB,你能给我推荐一个好方法吗?!
  • 尝试替换 $messagesArray['fromUserID'] = $row['fromUserID'];通过 $messagesArray['fromUserID'][$row['fromUserID']] = array(),然后将来自 fromUserID 的 msg 插入其中。
  • @Armage,坦克给你提示;它工作正常

标签: php mysql json mysqli


【解决方案1】:

试试看

if($query)
{
    while($row = mysqli_fetch_assoc($query))
    {
        $MSGArray = array();
        $messagesArray[$row['fromUserID']]['fromUserID'] = $row['fromUserID'];
        $MSGArray['messageID'] = $row['messageID'];
        $MSGArray['content'] = $row['content'];
        $messagesArray[$row['fromUserID']]['MessagesArray'][] = $MSGArray;      
    }
foreach($messagesArray as $value) {
    $outputArray['Messages'][] =  $value;
}
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-08
    • 2012-08-24
    • 2022-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    相关资源
    最近更新 更多