繁体   English   中英

在PHP中嵌套JSON

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM