***百度统计图表Echarts的php实现类,支持柱形图、线形图、饼形图

简介: /** * 百度数据统计图表echart的PHP实现类 * * 原作者: * @author: chenliujin * @since 2013-12-12 * * 修改者: * @author: iamlintao * @since: 2014...
/**
 * 百度数据统计图表echart的PHP实现类
 * 
 * 原作者: 
 * @author:	chenliujin	<liujin.chen@qq.com> 
 * @since 	2013-12-12 
 *  
 * 修改者:
 * @author:	iamlintao	<http://www.iamlintao.com>
 * @since:	2014-06-25
 * @version:
 * @revision:
 * 
 * 			修改后支持 柱形图(bar)、线形图(line)、饼形图(pie)
 * 
 * @example:
 * 
 * 		HTML代码部分:
 * 			<script src="js/esl.js"></script>
 * 			<body>
				<!-- 线形图、柱形图显示 -->
				<div id="chartArea" style="height:300px;border:1px solid #ccc;padding:10px;"></div>
				<!-- 饼形图显示 -->
				<div id="pieArea" style="height:300px;border:1px solid #ccc;padding:10px;"></div>
			</body>
			
		PHP代码部分:
		
		//  柱形图、线形图模拟数据
		$option = array(
			"legend"=>array("邮件营销","联盟广告","视频广告","直接访问","搜索引擎"),
			"xaxis"=>array("type"=>"category","boundaryGap"=>"true","data"=>array("周一","周二","周三","周四","周五","周六","周日")),		
			"series"=>array(
						array("name"=>"邮件营销","type"=>"bar","stack"=>"总量","data"=>array("120","132","101","134","90","230","210")),					
						array("name"=>"联盟广告","type"=>"bar","stack"=>"总量","data"=>array("220","182","191","234","290","330","310")),				
						array("name"=>"视频广告","type"=>"bar","stack"=>"总量","data"=>array("150","232","201","154","190","330","410")),				
						array("name"=>"直接访问","type"=>"bar","stack"=>"总量","data"=>array("320","332","301","334","390","330","320")),					
						array("name"=>"搜索引擎","type"=>"bar","stack"=>"总量","data"=>array("820","932","901","934","1290","1330","1320")),			
					),
			);

		$ec = new Echarts();
		echo $ec->show('chartArea', $option);	// 显示在指定的dom节点上

		// 饼形图模拟数据
		$optionPie = array(
				"legend"=>array("邮件营销","联盟广告","视频广告","直接访问","搜索引擎"),
				"series"=>array(
						array("name"=>"邮件营销","type"=>"pie","stack"=>"总量",
								"data"=>array(
										array("value"=>"335","name"=>"直接访问"),
										array("value"=>"310","name"=>"邮件营销"),
										array("value"=>"234","name"=>"联盟广告"),
										array("value"=>"135","name"=>"视频广告"),
										array("value"=>"1548","name"=>"搜索引擎"),
								),
						),
				),
		);
		
		$ec = new Echarts();
		echo $ec->show('pieArea', $optionPie);	// 显示在指定的dom节点上
 */

class Echarts{

	 public static function show($id, array $data){
 	
 		$xaxis = "";
 		$series = "";
    		
		if (empty($data)) {        	
			$data = array(
                'legend' => array(
                    'data' => array('-')
                ),
                'xaxis' => array(
                    'type' => 'category',
                    'boundaryGap' => 'false',
                    'data' => array('')
                ),
                'series' => array(
                    array(
                        'name' => '-',
                        'type' => 'line',
                        'itemStyle' => "{normal: {areaStyle: {type: 'default'}}}",
                        'data' => array()
                    ),
                )
            );
        }

		foreach ($data as $key => $value) {
			switch ($key) {
				case 'legend':
					foreach ($value as $k => $v) {
						switch ($k) {
							case 'data':
								$legend = $k . ':' . json_encode($v, JSON_UNESCAPED_UNICODE);
								break;
						}
					}
					break;
					
				case 'xaxis':
					foreach ($value as $k => $v) {
						switch ($k) {
							case 'type':
								$xaxis[] = $k . ":'" . $v . "'";
								break;
							case 'boundaryGap':
								$xaxis[] = $k . ':' . $v;
								break;
							case 'data':
								$xaxis[] = $k . ':' . json_encode($v, JSON_UNESCAPED_UNICODE);
								break;
						}
					}
					$xaxis = '{' . implode(', ', $xaxis) . '}';
					break;
					
				case 'series':
					foreach ($value as $list) {
						$tmp = array();
						foreach ($list as $k => $v) {
							switch ($k) {
								case 'name':
								case 'type':
									$tmp[] = $k . ":'" . $v . "'";
									break;
								case 'itemStyle':
									$tmp[] = $k . ':' . $v;
									break;
								case 'data':
									$tmp[] = $k . ':' . json_encode($v, JSON_UNESCAPED_UNICODE);
							}
						}
						$series[] = '{' . implode(', ', $tmp) . '}';
					}
					$series = implode(', ', $series);
					break;
			}
		}

		$script = <<<eof
            <script type="text/javascript">
            // Step:3 conifg ECharts's path, link to echarts.js from current page.
            // Step:3 为模块加载器配置echarts的路径,从当前页面链接到echarts.js,定义所需图表路径

			// 把所需图表指向单文件
            require.config({
                paths:{
                    echarts:'./js/echarts',
                    'echarts/chart/bar' : './js/echarts',	
                    'echarts/chart/line': './js/echarts',
					'echarts/chart/pie': './js/echarts'
                }
            });

            // Step:4 require echarts and use it in the callback.
            // Step:4 动态加载echarts然后在回调函数中开始使用,注意保持按需加载结构定义图表路径

			// 按需加载所需图表
            require(
                [
                    'echarts',
                    'echarts/chart/bar',
                    'echarts/chart/line',
 					'echarts/chart/pie'
                ],
                function(ec) {
                    var myChart = ec.init(document.getElementById('$id'));
                    var option = {
                        title : {
                            text: '',
                            subtext: ''
                        },
                        tooltip : {
                            trigger: 'axis'
                        },
                        legend: {
                            $legend
                        },
                        toolbox: {
                            show : true,
                            feature : {
                                mark : true,
                                dataView : {readOnly: false},
                                magicType:['line', 'bar'],
                                restore : true
                            }
                        },
                        calculable : true,
                        xAxis : [$xaxis],
                        yAxis : [{type : 'value'}],
                        series : [$series]
                    };

                    myChart.setOption(option);
                }
            );
            </script>
eof;

		echo $script;
	}
} 

 

原文地址: 26点的博客​(http://www.iamlintao.com/?p=3149)

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/
目录
相关文章
|
安全 关系型数据库 PHP
百度搜索:蓝易云【php适合做erp吗?】
虽然PHP在ERP开发中具有很多优势,但在实际开发中还需要根据项目的具体需求和规模来选择合适的技术栈和架构。ERP系统通常是复杂的,需要综合考虑数据库设计、安全性、性能等因素。因此,在开发ERP系统时,建议仔细规划和设计,充分了解业务需求,并选择适合的技术和开发工具来实现一个稳定、高效、安全的ERP系统。
246 0
|
存储 算法 安全
百度搜索:蓝易云【php几种常用的加密解密算法】
请注意,以上算法都有各自的特点和用途,选择合适的加密解密算法应根据具体需求和安全性要求。此外,加密只是数据保护的一部分,安全实现还应考虑其他因素,如密钥管理、访问控制和安全传输等。
249 0
|
JavaScript
echarts_自定义graph关系图
echarts_自定义graph关系图
1244 0
echarts迁徙图
前段时间在echarts社区,看见别人写的echarts迁徙图,学习并也写了一个
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
1746 0
 ECharts 雷达图案例001-自定义节点动画
|
数据可视化 黑灰产治理
📊 ECharts 雷达图案例002 - 诈骗性质分析
**ECharts 案例展示了诈骗性质的雷达图分析,以创新可视化揭示诈骗模式。定制化雷达图配色鲜明,多维度剖析不同诈骗手段,如网络刷单、冒充公检法。交互式设计允许用户深入探究细节。[点击这里](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454384)查看完整案例。#ECharts #数据可视化 #雷达图 #诈骗分析**
394 0
📊 ECharts 雷达图案例002 - 诈骗性质分析
|
程序员 PHP Python
2024年Python最全Python基础教程:keys()、values()和 items()方法,百度面试题php
2024年Python最全Python基础教程:keys()、values()和 items()方法,百度面试题php
2024年Python最全Python基础教程:keys()、values()和 items()方法,百度面试题php
|
缓存 NoSQL PHP
百度搜索:蓝易云【如何使用PHP进行数据库索引优化?】
通过以上方法,你可以使用PHP进行数据库索引优化,提高数据库查询性能和整体应用性能。同时,定期维护数据库和优化查询语句也是保持数据库高性能的关键。
328 11
【Echarts】Echarts 柱形图实现从右向左滚动
【Echarts】Echarts 柱形图实现从右向左滚动
855 0
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图
1855 0