[英]Nesting JSON in PHP
我在PHP中有这个
$comment = array;
while($row = mysql_fetch_array($sqlExec, MYSQL_ASSOC)){
$comment[$row['name']] = $row['comment'];
}
echo json_encode($comment);
Having these results
{"John":"Yo","Dan":"Hello","May":"Bye"}
问题是我实际上对John有两个注释(Zup,Yo),但是如您所见,它仅显示John的最后一个注释,即“ Yo”。 所以我希望约翰的结果是
{"John":["Yo","Sup"]}
^这可能吗?
我怎样才能做到这一点? 很抱歉,在处理JSON方面仍然遇到困难。 谢谢
这实际上是我的完整代码
while($row = mysql_fetch_array($sqlExec, MYSQL_ASSOC)){
$comment[$row['name']] = $row['comment'];
$sql_dup = "SELECT name, COUNT(name) AS dup_count
FROM comment
GROUP BY name
HAVING (COUNT(name) > 1)
";
$sqlExec_dup = mysql_query($sql_dup, $connection);
$row_dup = mysql_fetch_array($sqlExec_dup, MYSQL_ASSOC);
if($row['name'] = $row_dup['name']){
$sql_dup2 = "SELECT * FROM comment WHERE name = '{$row['name']}'";
$sqlExec_dup2 = mysql_query($sql_dup2, $connection);
while($row_dup2 = mysql_fetch_array($sqlExec_dup2, MYSQL_ASSOC)){
$x += 1;
if($x <= $row_dup['dup_count']){
$comment[$row['name']][] = $row_dup2['comment'];
}
}
}
}
如果名称重复,则意味着它有多个注释,仍然无法获得我想要的结果。
您将必须检查它是否已经存在,如果存在,则创建一个数组(或从头开始)
// Create arrays with names
$comment[$row['name']][] = $row['comment'];
要么
// Check if there's an array
if (isset($comment[$row['name']])) {
if (is_array($comment[$row['name']])) {
$comment[$row['name']][] = $row['comment'];
} else {
$comment[$row['name']] = array($comment[$row['name']], $row['comment']);
}
} else {
$comment[$row['name']] = $row['comment'];
}
我应该指出,第一种解决方案将是非常可取的,因为它的结果要多得多。
是的,有可能,但是您需要为此进行一些预处理:
$comment = array;
while($row = mysql_fetch_array($sqlExec, MYSQL_ASSOC)){
if(!isset($comment[$row['name']])) {
$comment[$row['name']] = array();
}
$comment[$row['name']][] = $row['comment'];
}
echo json_encode($comment);
是的,有可能。 代替此行:
$comment[$row['name']] = $row['comment'];
用这个:
$comment[$row['name']] = array('Yo', 'Sup');
并用所需的来自数据库的问候语替换数组的内容。
简单更改:
$comment[$row['name']] = $row['comment'];
至
$comment[$row['name']][] = $row['comment'];
每次出现相同名称时,都会覆盖$ comment数组的每个名称元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.