php,json_encode,嵌套数组,带有一个“左连接”查询

Posted

技术标签:

【中文标题】php,json_encode,嵌套数组,带有一个“左连接”查询【英文标题】:php, json_encode, nested arrays w/ one "left join" query 【发布时间】:2012-01-21 06:20:53 【问题描述】:

我有一个带有相应“cmets”表的“post”表(每个“comment”行都有一个与“post”表相关的“post_id”)。

这是我的函数,它从我的查询中回显我的 JSON 响应:

function echo_json_result($result) 

$arr = array();

while($row = mysql_fetch_assoc($result)) 

$arr[] = $row;



echo json_encode($arr);


目前这会吐出一个大数组。

为了响应的可读性,我希望将与这些“帖子”关联的“cmets”作为嵌套数组返回。

我可以想到一种方法来做到这一点。创建两个查询,一个用于注释,一个用于与注释关联的所有 cmets。然后,将包含所有 cmets 的关联数组添加到 notes 数组,然后对其进行 json_encode。

这是最好的方法吗?

【问题讨论】:

【参考方案1】:

尝试这样的事情,但帖子需要在您的 cmets 之前出现在结果中:

function echo_json_result($result) 

    $arr = array();

    while ($row = mysql_fetch_assoc($result)) 
        if( $row['post_id'] != "" )
        
             if( array_key_exists("comments", $arr['post_id']) )
             
                 array_push($arr['post_id']['comments'], $row);
             
            else
            
                 $arr['post_id']['comments'] = array($row);  
            
        
        else
        
            $arr[$row['id']] = $row;
        
    

    echo json_encode($arr);


【讨论】:

【参考方案2】:

这是 ORM 可以做的工作。例如,我举了a bunch of class 的工作,没有深度限制。提供了一个映射字段和所需嵌套数组的数组参数:

例如:

SELECT article.name, article.id as id, comment.id as comment_id, comment.value FROM article JOIN comment ON comment.article_id = article.id

以及对应的映射数组:

$mapping = [ 'id', 'name', 'comments' => ['id','value']];

【讨论】:

以上是关于php,json_encode,嵌套数组,带有一个“左连接”查询的主要内容,如果未能解决你的问题,请参考以下文章

php json_encode后的json里面的int类型变成string类型

json_encode() 转义 / 带有 \ [重复]

多维数组上的 json_encode() - 带有字符串键

我希望 PHP 中的 json_encode 返回一个 JSON 数组,即使索引不正确

将 PHP json_encode 数组发送到 jQuery

php json_encode 数组输出\错误