You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MySQL数据转换为适配Google Line Chart多折线图的JSON数组

你的问题核心是MySQL存储的长表结构和Google Line Chart要求的宽表结构不匹配,按以下步骤修改即可实现多折线图数据自动生成:

步骤1:查询MySQL原始数据

首先按照时间、单位排序查询所有业务数据,示例用PDO连接,可替换为你当前在用的数据库连接逻辑:

// 数据库连接配置请替换为你自己的参数
$pdo = new PDO('mysql:host=你的数据库主机;dbname=你的库名;charset=utf8', '数据库用户名', '数据库密码');
$sql = "SELECT units, utilization, usedtime FROM 你的业务表名 ORDER BY usedtime ASC, units ASC";
$stmt = $pdo->query($sql);
$rawData = $stmt->fetchAll(PDO::FETCH_ASSOC);

步骤2:PHP侧聚合为Google Chart要求的格式

对查询到的长表数据按时间维度聚合,转换为「一个时间点对应所有单位利用率」的宽表格式:

// 初始化图表数据,第一行为表头
$chartData = [
    ['Time', '0', '1', '2', '3', '4', '5', '6', '7']
];

// 临时数组按时间聚合数据
$timeGroup = [];
foreach ($rawData as $item) {
    $time = $item['usedtime'];
    $unitIndex = (int)$item['units'];
    $utilValue = (int)$item['utilization']; // 必须转换为数字类型,否则图表无法识别
    
    // 首次遇到该时间点时初始化8个单位的默认值为0
    if (!isset($timeGroup[$time])) {
        $timeGroup[$time] = array_fill(0, 8, 0);
    }
    // 给对应单位的位置赋值
    $timeGroup[$time][$unitIndex] = $utilValue;
}

// 把聚合后的数据填充到图表数组
foreach ($timeGroup as $time => $unitValues) {
    $chartData[] = array_merge([$time], $unitValues);
}

// 转换为JSON格式供前端调用
$chartJson = json_encode($chartData);

步骤3:前端替换手动测试数据

把原来手动写的测试数组替换为PHP输出的JSON数据即可,其余图表配置无需修改:

function drawChart() {
    // 替换原手动数组为PHP输出的JSON
    var data = google.visualization.arrayToDataTable(<?php echo $chartJson; ?>);

    // 以下配置保持你原有的逻辑不变即可
    var options = {
        title: 'Units',
        curveType: 'function',
        legend: {
            position: 'bottom',
            colors: ['#0cae04', 'blue', 'red', 'green', '#4f9ee0', 'gray', 'navy', '#d3362d']
        }
    };
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
}

可选优化

如果你的单位(units)取值不是固定的0-7,可以先从数据库查询所有单位的取值动态生成表头,无需写死。

内容的提问来源于stack exchange,提问作者RJP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:57:03