分层数据到array / json

时间:2016-11-21 16:34:29

标签: php arrays json

我正在尝试学习如何将MySQL查询的结果正确编码为数组/ JSON。我可以做基础知识,我遇到的困难是得到一个特定的结构。

我的数据如下:

db_name   file_type  name   value   count
archive   A          send   vid     338
archive   A          perm   trrr    323
archive   A          mod    2016    339
archive   B          rate   32K     5414
archive   B          off    Bleep   466
archive   B          level  1222    466

我想创建一个可以编码为JSON的数组,如下所示:

{
 "archive": {
    "A": {
      "send": {
        "vid": 338
        }
      "perm": {
        "trrr": 323
        }
      "mod": {
        "2016": 339
        },
    "B": {
      "rate": {
        "32K": 5414
        }
      "off": {
        "Bleep": 466
        }
      "level": {
        "1222": 466
        }
   }
}

任何帮助或推动正确的方向表示赞赏。谢谢!

编辑2:根据Farzad的回答。越来越接近。我试图对db_name,file_type和name进行分组。理想情况下,这将以导致我的JSON输出中没有方括号的方式完成。正在进行中:

$result = mysql_query($myquery);

if ( ! $result ) {
    echo mysql_error();
    die;
};

while ($row = mysql_fetch_assoc($result)) { 
                    $outp[$row["file_type"]][] = array(
                                $row["name"] => array($row["value"] => $row["count"])
                            );
                }

$result = array('archive' => $outp); 
echo json_encode($result);

编辑3 这就是诀窍:

while ($row = mysql_fetch_assoc($result)) { 
                    $outp[$row["file_type"]][$row["name"]][] = array(
                                array($row["value"]=> $row["counts"])
                            );
                }

$result = array('original' => $outp);  

echo json_encode($result);

1 个答案:

答案 0 :(得分:1)

你需要这样的东西:

编辑:我也看到你也做某种组,添加[]!它会工作,但是,你需要把所有" A"列表中的数据

while ($result->fetch()) {
                        $outp[$file_type][] = array(
                                    $name => array($value=> $count)
                                );


                    }
$result = array('archive' => $outp);
echo json_encode($result);

这是一个测试

$file_type = 'type';
$name = 'name';
$count = 'cont';
$value = 'value';
$outp= array();
                        $outp[$file_type][] = array(
                                    $name => array($value=> $count)
                                );



echo json_encode($outp);