我正在尝试创建一个嵌套的JSON数组,第二个查询的结果附加到第一个查询的行。
到目前为止我的代码如下: -
$output = array();
$sql = "select cp_comments.*,users.user_login from ".$wpdb->prefix."cp_comments cp_comments
left join ".$wpdb->prefix."users users on users.ID=cp_comments.uid
where songid='$id'
order by cp_comments.id asc";
$comments = $wpdb->get_results($sql);
foreach($comments as $c){
$sql = "select cp_replies.*,users.user_login from ".$wpdb->prefix."cp_replies cp_replies
left join ".$wpdb->prefix."users users on users.ID=cp_replies.uid
where cp_replies.cid='".$c->id."'
order by cp_replies.id asc";
$replies = $wpdb->get_results($sql);
$output['comment-'.$c->id] = $c;
if($replies){
foreach($replies as $r){
// The line below causes the problem
//$output['comment-'.$c->id][] = $r;
}
}
}
echo json_encode( $output );
正如你可以看到我试图做的是检索query-1的结果,浏览它们并填充数组。到现在为止还挺好。然后对于结果集中的每一行,执行第二个查询,使用$ c-> id作为变量,根据id动态更改第二个查询,然后将此数据嵌套在第一个查询的每个返回行中。
我注释掉的行会导致错误: -
Fatal error: Cannot use object of type stdClass as array in
虽然我粗略地了解了为什么会出现这种错误,但我不知道如何修复它,当我尝试使用while循环等标准的多维数组时,我无法访问$ c-&gt ; $ id变量使整个第二个查询毫无价值。
基本上我希望以这种格式返回数据: -
{ "comment-2" : [ { "avatar" : "http://www.songbanc.com/wp-content/uploads/avatars/1/8bb11e958a26913e2c13393014e854d5-bpthumb.jpg",
"body" : "More tests....",
"display_name" : "admin",
"id" : "26",
"playtime" : 36.206896551699998,
"posttime" : "2011-10-08 11:11:55",
"cid" : "26",
"songid" : "30",
"uid" : "1",
"user_login" : "admin",
"user_url" : "http://www.songbanc.com/members/admin/"
"cid": "1",
"replies" : [ { "cid" : "26",
"body" : "test reply",
"posttime" : "2011-10-08 11:11:55"
}]
},
它目前是2维,但没有'回复'。
答案 0 :(得分:1)
$ output ['comment - '。$ c-> id]是一个对象。我想你想要像
这样的东西$ output ['comment - '。$ c-> id] - >回复[] = $ r;