CodeIgniter如何实现数据可视化_CodeIgniter图表生成技巧【技巧】

雪夜

雪夜

2026-05-13

578人浏览

原创

codeigniter需配合前端图表库实现数据可视化,核心是安全高效地将数据库数据转为标准json格式;应避免n+1查询、确保数字类型正确、设置content-type并用exit终止响应。

codeigniter如何实现数据可视化_codeigniter图表生成技巧【技巧】

CodeIgniter 本身不内置图表功能,数据可视化必须靠前端库(如 Chart.js、ECharts、Google Charts)配合后端数据准备来实现。关键不在“用什么画图”,而在“怎么把数据库数据高效、安全、结构化地喂给图表”。

Chart.js 需要的 JSON 格式长什么样

几乎所有前端图表库都要求 labelsdata 两个平行数组,例如:

{
  "labels": ["O+", "A-", "B+", "AB+"],
  "data": [42, 18, 35, 7]
}

这不是随便拼出来的字符串——它必须是合法 JSON,且字段名、嵌套层级、数据类型(尤其是数字不能是字符串)都要严格匹配前端 JS 的预期。常见错误包括:

  • json_encode() 前没清理数据,导致空值或非法字符混入
  • count 字段当字符串传(比如 "42"),Chart.js 会静默忽略该数据点
  • 在控制器里用 echo json_encode(...) 直接输出,却没设 Content-Type: application/json,Ajax 请求可能解析失败

避免 N+1 查询:用 GROUP BY 一次拿全血型统计

查“每种血型有多少可用血包”,别写循环查 N 次。低效代码典型特征是:foreach 里套 $this->db->query()。正确做法是把聚合逻辑交给 MySQL:

echarts就业数据可视化模板
echarts就业数据可视化模板

基于html5 echarts实现的就业平台数据可视化模板前端页面

下载
$this->db->select('COUNT(PacketID) AS count, BloodType')
         ->from('packets')
         ->where('isAvailable', 1)
         ->group_by('BloodType');

这样一条查询就返回全部分组结果。再用 result_array() 转成 PHP 数组,遍历构造 labelsdata 即可。注意两点:

  • BloodType 字段若含空格或特殊字符(如 "O +"),前端渲染时可能出错,建议在 SQL 中用 TRIM() 或在 PHP 中 trim()
  • COUNT() 返回整数,但 CodeIgniter 有时会转成字符串,强制类型转换更稳妥:(int)$row['count']

Ajax 加载图表数据时 controller 的响应要点

如果图表用 Ajax 异步加载(推荐),Controller 方法不该加载视图,而应专注输出 JSON:

  • 开头加 header('Content-Type: application/json');
  • 不要 echo 其他任何内容(包括空格、BOM、调试 var_dump
  • exitdie 终止后续执行,防止意外输出污染 JSON
  • 示例结构:
public function get_blood_chart_data()
{
    header('Content-Type: application/json');
    $data = $this->db->select('COUNT(PacketID) AS count, BloodType')
                     ->from('packets')
                     ->where('isAvailable', 1)
                     ->group_by('BloodType')
                     ->get()
                     ->result_array();

    $chart = [
        'labels' => array_column($data, 'BloodType'),
        'data'   => array_map(fn($r) => (int)$r['count'], $data)
    ];
    echo json_encode($chart);
    exit;
}

Google Charts 的 script 加载时机容易被忽略

Google Charts 必须等 google.charts.load 完成后再调用 drawChart,否则报 google is not defineddrawChart is not a function。常见陷阱:

  • <script src="https://www.gstatic.com/charts/loader.js"></script> 放在 底部,但 google.charts.load 写在了前面——加载未完成就执行
  • 多个图表共用一个 drawChart 函数名,后定义的会覆盖前一个
  • 没用 google.charts.setOnLoadCallback(drawChart),而是直接调用 drawChart()

最稳的方式:所有 Google Charts 相关 JS 代码放在一个 <script></script> 块内,并确保它在 loader.js 之后、且用 setOnLoadCallback 包裹。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

5505

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

3630

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

1786

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

2293

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

2811

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

2020

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

3073

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

2338

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

10931

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程