【问题标题】:Transforming MySQL array to json array将 MySQL 数组转换为 json 数组
【发布时间】:2014-01-23 18:26:30
【问题描述】:

我正在尝试制作一个饼图来显示操作系统的数据,并使用以下 SQL 查询计算每个客户端的操作系统

SELECT os, COUNT( * ) AS count FROM clients GROUP BY os

然后我用下面的 PHP 将它们放在一个数组中

$query->execute();
$count = array();
while($row = $query->fetch()){
 $currOS = $row['os'];
 $count[$currOS] = $row['count'];
}
return json_encode($count);

当 json_encode'd 时输出如下:

{"AAA":"1","Windows 7 x86":"12"}

但是,饼图 javascript 插件需要以下标记

var data = [
 { label: "AAA", data: 50},
 { label: "Windews 7", data: 7},
 { label: "Windews XP", data: 8},
 { label: "Windows 8", data: 9}
]; 

我可以使用什么正确的 PHP 语法?

【问题讨论】:

  • 注意:AAA 只是一个随机的操作系统名称
  • 也显示饼图的代码或查看饼图api
  • 那么你错误地构建了它,你应该构建一个字典数组,其中包含标签和数据作为键并为其添加值。

标签: javascript php mysql arrays json


【解决方案1】:

使用 labeldata 作为关联

SELECT os AS label , COUNT( * ) AS data FROM clients GROUP BY os

然后使用 mysql_fetch_assoc

$data=array();
while($row=$query->fetch_assoc()){
 $data[]=$row;
}
return json_encode($data);

【讨论】:

    【解决方案2】:

    你可以试试这个,

        while($row = $query->fetch()){
            $currOS = $row['os'];
            $count[]['label'] = $currOS;
            $count[]['data'] = $row['count'];
        }
    

    【讨论】:

    • 这将返回{"label":"Windows 7 x86","data":"12"}。 AAA 操作系统似乎消失了。
    • 我认为您的意思是 $count[]['label] 而不是 $count['label'][]
    【解决方案3】:
    $outputData = array();
    
    while($row = $query->fetch())
    {
        $outputData[] = array(
            'label' => $row['os'],
            'data' => $row['count'],
        );
    }
    
    return json_encode($outputData);
    

    【讨论】:

    • 我是新来的,所以我想知道如何给出好的答案,但你的意思是解释到底有什么问题,以及如何调整代码以获得问题所有者想要的?
    • No 你的回答没有错。例如当您创建 outputData 数组并为其赋值时。所以这是与 OP 代码的区别或更正。因此,如果您将这些事情解释清楚,其他人也会更好地理解。
    猜你喜欢
    • 2018-05-30
    • 2016-12-11
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2014-10-10
    • 2011-08-02
    • 2014-01-30
    相关资源
    最近更新 更多