处理类似提交问卷的数据,要生成图表,用了ECharts,好方便的。

简陋效果:

1.表单存储

有单选和多选题,单选直接存储各选项数字值,1,2,3,4...中一个;多选用|分隔存储选项值,如1|3,2|3|4

数据库存储后如下:

2.ECharts饼图

ECharts官网,以及新手上路都很清楚,饼图很简单:配置和数据如下示例

option = {
title: {
text: '名称',
},
series : [
{
type: 'pie',
radius: '56%',
data:[
{value:235, name:'视频广告'},
{value:274, name:'联盟广告'},
{value:310, name:'邮件营销'},
{value:335, name:'直接访问'},
{value:400, name:'搜索引擎'}
]
}
]
};

radius是饼图的半径,基于有高宽的DOM容器。

3.使用数据

SQL查出数据,把需要的数据输出到series的data即可:

 <?php
$data=array( //data数组是需要输出的列分析饼图
'性别','年龄','年级','学科',.....
);
foreach($data as $k=>$v){
$x=$k+1;
echo '<div id="main'.$x.'" style="width:400px;height:300px" class="main"></div>';
echo "
<script type='text/javascript'>
var myChart$x = echarts.init(document.getElementById('main".($x)."'));
var option = {
title: {
text: '".$v."',
show:false
},
series : [
{
type: 'pie',
radius: '55%',
data:[";
echo redata($k);
echo "
], itemStyle:{
normal:{
label:{
show: true,
formatter: '{b}{c}({d}%)'
},
labelLine :{show:true}
}
}
}]
};
myChart$x.setOption(option);
</script>";
}
?>

循环出需要展示的列,执行自定义函数redata($id)每次返回需要的值,新东西normal:formatter主要是为了输出百分比(所以才说特别方便,全交给库处理了拜托你了),手册里有介绍。

到这里,已经解决了饼图测试数据怎么放,然而数据如何获取并返回?只需要得到如下格式数据即可:

{value:23, name:'吃饭'},
{value:24, name:'起床'}

4.数据库获取数据

$sql="select $names as skey,count($names) as snum from `tablename` group by $names";

$names是需要获取的列名,比如需要age列数据

把这4条数据循环并成字符串: {value:235, name:'视频广告'} 这种就好。name如何来,就得规定好age选1时输出啥,age选2时输出啥,...:(示例的外层case 2是年龄对应的代码段)

case 2:
{
switch($row['skey']){
case 1:
$rowname='大一';
break;
case 2:
$rowname='大二';
break;
case 3:
$rowname='大三';
break;
case 4:
$rowname='大四';
break;
case 5:
$rowname='其他';
break;
}
}
break;
...其他有意义的代码
$rowname.='\n';//并入换行
$redata.="{value:".$row['snum'].", name:'".$rowname."'},";

$redata就是要返回的series:data段,最后别忘记去掉$redata多余的(,)英文逗号。

上面的只是单选数据,对于多选数据用同样的sql语句会出如下结果,以tvgoal字段为例:

WTF?直接把数据内容去分组算总和了,无效的数据,修正后:

一次查一条记录中某值(图中为2,字段为tvgoal)的总数。代码段:

case 5:
{
$namearr=array('韩剧','美剧','日剧','台剧','港剧','泰剧','内地','无所谓');
for($i=1;$i<=count($namearr);$i++){
$sql="select count(*) as snum from `tablename` where $i in (select replace(`各字段`,'|',',')) ";
$data=$ph->query($sql);
if($row=$ph->fetcharray($data)){
$rowname=$namearr[$i-1];
$rowname.='\n';
$redata.="{value:".$row['snum'].", name:'".$rowname."'},";
}
}
}
break;

其中,case 5是tvgoal的代码,而且,$namearr数组各值选项value为1,2,3,4,5...对应,才可依赖上述代码。别吐槽原生的查询=。=。顺便一说,这些数据也是虚拟出来的。

暂完。

ECharts饼图试玩的更多相关文章

  1. HTML5+JS 《五子飞》游戏实现(七)游戏试玩

    前面第一至第六章我们已经把<五子飞>游戏的基本工作都已经讲得差不多了,这一章主要是把所有的代码分享给大家,然后小伙伴们也可以玩一玩. 至于人机对战的我们放到后面讲进行分析. 试玩地址:ht ...

  2. 一个小玩意 PHP实现微信红包金额拆分试玩

    <meta charset="utf-8"> <?php // 新年红包金额拆分试玩 class CBonus { public $bonus;//红包 publ ...

  3. 1.2G内存试玩RAMOS_XP

    1.2G内存试玩RAMOS_XP1.为了防止做系统时出现意外,用Bootice把C盘MBR修改为Grub4dos,这样子系统如果失败,可以进入PE重做. 2.进入PE格式化C盘,格式化的时候勾选启用N ...

  4. 8个经典的HTML5游戏在线试玩及源码学习

    原文地址:http://www.oschina.net/news/32364/html5-games 游戏,毫无疑问是拿来供大家娱乐玩耍的,这也无可厚非,但是,今天给大家分享的8个HTML5游戏,在好 ...

  5. 将数据动态加载到Echarts饼图中

    需求描述 Echarts中的官方示例是将数据的设定写好在页面的配置项中的,但在实际的开发展示中,我们需要按照需求通过调用后台的接口获取数据,再将数据加载到特定的Echarts饼图中. 实现效果 实现步 ...

  6. Apollo框架试玩

    2017年7月5日,百度举行了AI开发者大会,在会上发布了Apollo项目,并进行了演示,该项目在Github上已经能够被访问.出于一个程序员的好奇,昨天试玩了一把,确实不错. http://apol ...

  7. 发布到FaceBook试玩广告,FaceBook要求要一个Html文件

    Facebook 试玩广告具体要求: 试玩广告参数是创建试玩广告素材时要满足的要求. 试玩素材应为 HTML5 格式. 试玩广告素材不应使用 mraid.js 格式. 包含所有素材的试玩广告的单个 H ...

  8. [试玩] FMXLinux (Firemonkey for Linux) Linux 桌面开发(第三方插件)

    FMXLinux 是一个可以用来开发 Linux 桌面软件的第三方插件,它需要配合 Delphi 10.2 Toyko 官网:http://www.fmxlinux.com/ 使用方法:开启 FMX ...

  9. ESP32 LyraT音频开发板试玩(二):播放音乐

    我是卓波,很高兴你来看我的博客. 系列文章: ESP32 LyraT音频开发板试玩(一):搭建开发环境 ESP32 LyraT音频开发板试玩(二):播放音乐 本文延续上一篇博客 将D:\msys32\ ...

随机推荐

  1. Effective C++ -----条款54:让自己熟悉包括TR1在内的标准程序库

    C++ 标准程序库的主要机能由STL.iostream.locales 组成.并包含C99 标准程序库. TR1 添加了只能指针(例如 tr1::shared_ptr).一般化函数指针(tr1::fu ...

  2. .NET LINQ 筛选数据

    筛选数据      筛选指将结果集限制为只包含那些满足指定条件的元素的操作. 它又称为选择. 方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 OfType ...

  3. 在新机器部署Qt+mysql程序

    1.一般情况下需要将Qt5Core.dll,Qt5Gui.dll,Qt5Sql.dll,Qt5Widgets.dll,platforms\qwindows.dll msvcp120.dll,msvcp ...

  4. eclipse 搭建python环境

    1.安装eclipse + jdk windows下面就直接下载,双击安装就完了. Linux下: 安装eclipse: 安装完之后,可直接运行eclipse: 快捷方式在: 安装jidk:   2. ...

  5. TFS二次开发系列:三、TFS二次开发的第一个实例

    首先我们需要认识TFS二次开发的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection,他们的不同点在于可以获取不同的TFS ...

  6. C++ 基础知识复习(一)

    数据类型,常量与变量部分:(发现有些点竟然这么多年第一次发现) C++基本数据类型有哪些: 答:整型,浮点型,void型. 注:其他各种数据类型均是这三种类型的扩充,另外void类型在实际程序中经常用 ...

  7. GitHub使用心得

    PHP今天算是学习结束了;版本控制也了解很久了,比较熟悉的是svn,Git一直都不太熟,也可能是它是英文的缘故,感觉很费劲,所以用的不多,但不得不说,它功能真的很强大;今天试着和朋友用Git开发一个简 ...

  8. ldd 命令用于判断某个可执行的binary档案含有什么动态链接库(so)

    [root@NB ok]# ldd /bin/ls linux-vdso.so. => (0x00007ffd7dbf6000) libselinux.so. => /lib64/libs ...

  9. Java的RMI远程方法调用实现和应用

    最近在学习Dubbo,RMI是很重要的底层机制,RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制.使用这种机制,某一 ...

  10. 【Java EE 学习 22 下】【单线程下载】【单线程断点下载】【多线程下载】

    一.文件下载简述 1.使用浏览器从网页上下载文件,Servlet需要增加一些响应头信息 (1)response.setContentType("application/force-downl ...