javascript - 具有嵌套 JSON 数据的 C3、D3 图表

标签 javascript php json d3.js c3.js

我正在尝试使用 C3.js 创建一个条形图,其中数据通过 PHP 从 mySQL 数据库 中提取并返回到 JS 作为 JSON。 PHP 代码搜索排好序的列并将所有相关列加在一起以得到一个数组 {category:name, total_purchased:value}

$category_data_sql = "SELECT `category`, `total_purchased` FROM `item` ORDER BY `category`";
$category_data_result = $mysqli->query($category_data_sql);

$data = array();
$key = 0;
foreach ($category_data_result as $item) {
    $key = $item['category'];
    if (!array_key_exists($key, $data)) {
        $data[$key] = array(                
            'category' => $item['category'],
            'total_purchased' => $item['total_purchased'],
        );

    } else {
        $data[$key]['total_purchased'] = $data[$key]['total_purchased'] + $item['total_purchased'];

    }

    $key++;
}
print_r(json_encode($data));

生成的 JSON 输出是:

{
    "BRACELET": {
        "category": "BRACELET",
        "total_purchased": 26
    },
    "SALESMAT": {
        "category": "SALESMAT",
        "total_purchased": 4
    },
    "TOPPING": {
        "category": "TOPPING",
        "total_purchased": 48
    }
}

但是,我无法在图表中显示这些数据。 下面的代码工作正常,一切都按预期显示。

var json_data = (<?php echo json_encode($data); ?>);
    var chart = c3.generate({
        bindto: '#chart',
        data: {
            x: 'category',                        
            json: [
                    {
                        "category": "BRACELET",
                        "total_purchased": 26
                    },
                    {
                        "category": "SALESMAT",
                        "total_purchased": 4
                    },
                    {
                        "category": "TOPPING",
                        "total_purchased": 48
                    },
                    {
                        "category": "NECKLACE",
                        "total_purchased": 29
                    }
            ],
            type: 'bar',
            keys: {
                x: 'category',
                value: [ "total_purchased" ]
            }
        },
        axis: {
            x: {
                type: "category"
            }
        },

        bar: {
            space: 0.25
        }
    });

但是一旦我使用变量 json_data 或者如果我手动复制生成的 JSON 数据,我会在控制台中得到一个没有错误的空白表。 任何帮助将不胜感激。 提前致谢,科林。

最佳答案

您可以使用 array_values() 将您的数组转换为数字类型:

$json_data = json_encode(array_values($data));

关于javascript - 具有嵌套 JSON 数据的 C3、D3 图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890950/

相关文章:

javascript - 在 daterangepicker 如何动态设置 minDate?

php - AJAX 调用返回时图像不显示

javascript - Jquery 操作 Json 字符串

java - GWT 上的 JsonP 响应代码

java - Html,处理 JSON 响应

javascript - 在javascript中将一个时间范围分割成其他时间范围

c# - 从服务器下载文件并将其保存在客户端

javascript - 这个数组过滤器中的函数是如何工作的?

php - jQuery $.post 字符串转义问题

php - 使用php从select中选择一个值