整体实现逻辑介绍
  1.对查询数据做一个总体查询,需要根据查询自己主要业务逻辑数据.
  2.对总体查询数据和时间和币种类型做三部分数据处理.
  3.总体查询数据按照币种和日期组装二维数据对应得键值是价格.
  4.对时间做个数据处理主要是基于时间字段做个二维数组数据处理.
  5.对币种做个一维数组下标为数字,后期做数据处理需要使用for循环处理数据.
  6.统计汇总总和需要 3方法和5方法处理数据,在做数据逻辑汇总运算.
  7.统计每日不同币种需要 3方法和4方法处理数据,在做数据逻辑合并数组运算.   //30天收入走势图
public function actionIncome()
{
/* $l sql查询后数据结构(分组日期和币种)
array[0=>array[
'date' => '20180208',---日期
'fee' => '10.00', ---价格
'currency' => 'USD', ---币种类型
],1=>array[
'date' => '20180208',
'fee' => '20.00',
'currency' => 'TWD',
]];*/
$l = $this->incomeService->getDateIncomeList(); /* $type sql查询后数据结构(distinct币种字段)
array[0=>array[
'currency' => 'USD',
],1=>array[
'currency' => 'TWD',
]];*/
$type = $this->incomeService->getCurrency();
$number = count($type); /* $data_type 币种类型,数据处理过后结构
array[
0 => 'USD',
1 => 'TWD',
];*/
$data_type = array();
foreach ($type as $key=>$value) {
$data_type[$key] = $value['currency'];
} /* $data_total 统计每天不同币种价格,数据处理过后结构
array['USD'=>array[
'20180208' => '10.00',
'20180207' => '20.00',
],'TWD'=>array[
'20180208' => '10.00',
'20180207' => '20.00',,
]];*/
$data_total = array();
foreach ($l as $key=>$value) {
$data_total[$value['currency']][$value['date']] = $value['fee'];
} /* $total_sum 统计30天币种汇总,数据处理过后结构
array[
'USD' => '10.00',
'TWD' => '20.00',
];*/
$total_sum = array();
for($i=0; $i<$number; $i++){
$total_sum[$data_type[$i]] = empty($data_total[$data_type[$i]]) ? 0 : array_sum($data_total[$data_type[$i]]);
} /* $time 统计时间,数据处理过后结构
array['20180208'=>array[
'date' => '20180208',
],'20180207'=>array[
'date' => '20180207',
]];*/
$time = array();
foreach ($l as $key=>$value) {
$time[$value['date']]['date'] = $value['date'];
} /* $list 汇总合并每天不同币种,数据处理过后结构
array['20180208'=>array[
'date' => '20180208',
'USD' => '10.00',
'TWD' => '20.00',
],'20180207'=>array[
'date' => '20180207',
'USD' => '10.00',
'TWD' => '20.00',
]];*/
$list = array();
foreach ($time as $key=>$value){
$list[$key]['date'] = $key;
for($i=0; $i<$number; $i++){
$list[$key][$data_type[$i]] = empty($data_total[$data_type[$i]][$key]) ? 0 : $data_total[$data_type[$i]][$key];
}
} //Highcharts数据图表插件数据处理 ---(可以用百度等插件)
$chartsData = $this->searchChartsDataFormat($list); $this->render('income', array(
'list' => $list,
'chartsData' => $chartsData,
'total_sum' => $total_sum,
'number' => $number,
'data_type' => $data_type,
));
} /**
* [searchChartsData 数据图表使用]
* @param string $sql [description]
* @return [type] [array]
*/
public function searchChartsDataFormat($data){
if(!is_array($data))return array();
$day=$total_CNY=$total_THB=$total_TWD=$total_USD=array();
$result=array();
foreach ($data as $k => $v) {
$day[]='\''.$v['date'].'\'';
$total_CNY[]= $v['CNY'];
$total_THB[]= $v['THB'];
$total_TWD[]= $v['TWD'];
$total_USD[]= $v['USD'];
}
$result['date']=implode(',', array_reverse($day) );
$result['total_CNY']=implode(',', array_reverse($total_CNY) );
$result['total_THB']=implode(',', array_reverse($total_THB) );
$result['total_TWD']=implode(',', array_reverse($total_TWD) );
$result['total_USD']=implode(',', array_reverse($total_USD) );
return $result;
}
//前端数据处理和后端数据处理逻辑相似
<div id="incomeChat" style="width: 90%;height:50px;"></div> <div>
<div id="container" style="min-width:400px;height:400px"></div>
</div> <div class="table-responsive">
<table class="table table-bordered table-condensed">
<thead>
<tr class="xmsb-admin-table-head">
<th>日期</th>
<?php for($i=0; $i<$number; $i++){?>
<th><?php echo $data_type[$i]; ?></th>
<?php }?>
</tr>
</thead>
<tbody>
<?php foreach($list as $lv){?>
<tr>
<td><?php echo $lv['date']; ?></td>
<?php for($i=0; $i<$number; $i++){?>
<td><?php echo $lv[$data_type[$i]]; ?></td>
<?php }?>
</tr>
<?php }?>
<tr class="xmsb-admin-table-head">
<td>汇总</td>
<?php for($i=0; $i<$number; $i++){?>
<td><font size="2" color="red"><?php echo $total_sum[$data_type[$i]]; ?></font></td>
<?php }?>
</tr>
</tbody>
</table>
</div> <!-- jQuery -->
<script src="/public/bower_components/jquery/dist/jquery.min.js"></script>
<script type="text/javascript" src='/public/js/highcharts.js'></script>
<script type="text/javascript" src='/public/js/highcharts-zh_CN.js'></script>
<script type="text/javascript">
var chart = new Highcharts.Chart('container', {
title: { text: '',x: -20 },
subtitle: { text: '', x: -20 },
xAxis: {
categories: [<?php echo isset($chartsData['date'])?$chartsData['date']:''; ?>]
},
yAxis: {
title: { text: '30天价格统计' },
plotLines: [{ value: 0, width: 1, color: '#808080' }]
},
tooltip: {
valueSuffix: ''
},
legend: {
layout: 'vertical', align: 'right', verticalAlign: 'middle', borderWidth: 0
},
series: [{
name: 'CNY',
data: [<?php echo isset($chartsData['total_CNY'])?$chartsData['total_CNY']:""; ?>]
},{
name: 'THB',
data: [<?php echo isset($chartsData['total_THB'])?$chartsData['total_THB']:""; ?>]
}, {
name: 'TWD',
data: [<?php echo isset($chartsData['total_TWD'])?$chartsData['total_TWD']:""; ?>]
}, {
name: 'USD',
data: [<?php echo isset($chartsData['total_USD'])?$chartsData['total_USD']:''; ?>]
}]
});
</script>

上面代码实现下图功能

php 统计每天价格,货币种类,汇总得算法和数据处理 (后端和前段实现自动统计价格和币种类型)的更多相关文章

  1. 4.1.4 统计“锦途网”旅游线路平均价格,并采用尽可能多的方式将该价格赋给用户会话变量 @avg_short_price,并输出该变量

    查看本章节 查看作业目录 需求说明: 统计"锦途网"旅游线路平均价格,并采用尽可能多的方式将该价格赋给用户会话变量 @avg_short_price,并输出该变量 在 MySQL ...

  2. Oracle的自动统计信息不收集直方图的信息

    Oracle的自动统计信息不收集直方图的信息 在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1 在10 ...

  3. Oracle错误:动态执行表不可访问,本会话自动统计被禁止,关闭自动统计之后的问题

    使用PL/SQL时, 每次第一次打开表的时候会提示"动态执行表不可访问,本会话的自动统计被禁止"的错误,一消息如下: V$SESSION,V$SESSTAT,V$STATNAME没 ...

  4. Oracle自动统计信息的收集原理及实验

    [日期:2014-11-21]来源:Linux社区  作者:stevendbaguo[字体:大 中 小] 从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATH ...

  5. PLSQL Developer报“动态执行表不可访问,本会话的自动统计被禁止”的解决方案

    现象与提示: 第一次用PLSQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错"动态执行表不可访问,本会话的自动统计被禁止 ...

  6. Oracl 动态执行表不可访问,本会话的自动统计被禁止

    oracle ---建立SQL窗体 写入 select * from tableA; 弹出错误窗口 : 动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里你可以禁止统计,或在v$session, ...

  7. Oracle\PLSQL Developer报“动态执行表不可访问,本会话的自动统计被禁止”的解决方案

    现象: 第一次用PLSQL Developer连接数据库,若用sys用户登录并操作则正常,若用普通用户比如haishu登录并创建一个表则报错“动态执行表不可访问,本会话的自动统计被禁止.在执行菜单里你 ...

  8. 使用 PLSQL 提示动态执行表不可访问,本会话的自动统计被禁止

    使用PLSQL,第一次执行表的select操作的时候,提示"动态执行表不可访问,本会话的自动统计被禁止",如上图: 这种问题,一看就是当前连接用户没有对sys用户下的表v$sess ...

  9. PLSQL报错:"动态执行表不可访问,本会话的自动统计被禁止"

      PLSQL报错:"动态执行表不可访问,本会话的自动统计被禁止" CreationTime--2018年7月16日19点26分 Author:Marydon 1.情景展示 2.解 ...

随机推荐

  1. ETCD 简介及基本用法

    ETCD 项目地址 ETCD 官方文档 1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. 特点 简单:安装配置使用简单 ...

  2. LeetCode 337. House Robber III 动态演示

    每个节点是个房间,数值代表钱.小偷偷里面的钱,不能偷连续的房间,至少要隔一个.问最多能偷多少钱 TreeNode* cur mp[{cur, true}]表示以cur为根的树,最多能偷的钱 mp[{c ...

  3. Songwriter CF1252-E(贪心)

    题意: 已知一个序列a,问能否将a映射到序列b,使得相邻元素之间的大小关系不变(三种),且相邻元素不能相差超过k,且每个元素范围在[L,R]内.如果能,求字典序最小的b. 思路: 可以设b[1]的范围 ...

  4. VS2017使用assimp 5.0.0 error C2589: '(' : illegal token on right side of '::' 解决办法

    坑爹微软Sucks Again. assimp 终于更新到了5.0.0并且支持GLTF2格式,包含动画正确解析,在viewer中也能看到正确结果,真他喵的不容易,然后拿来编译完到自己项目里用,就出这玩 ...

  5. python3.7.0 安装与配置

    python 3.7.0 X64下载地址: https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe 更多版本下载请移步到:http ...

  6. (转载)Solr4.x在Tomcat下的部署

    Step1 下载安装包: 下载最新版本安装包 点击此处下载Tomcat    点击此处下载Solr Step2 解压: 解压Tomcat和Solr Step3 拷贝War包: 拷贝\solr-4.x\ ...

  7. kmp(最长前缀与后缀)

    http://acm.hdu.edu.cn/showproblem.php?pid=1358 Period Problem Description For each prefix of a given ...

  8. 记一次用Linux curl命令获取Django url返回值异常的问题

    问题描述: curl 检测 URL 返回值以判断服务器是否正常 原命令:curl -I -m 10 -o /dev/null -s -w %{http_code} --insecure $url 问题 ...

  9. 前端 ----- 初探ES6 Promise

    前段时间做项目,在调用接口的时候,遇到了异步问题.开始是使用定时器,发现效果并不理想,于是又用了回调,效果还好但是,很明显的影响了代码的整洁性. 于是我想起了在面试的那段时间,背过的面试题里,出现过一 ...

  10. linux性能分析工具Uptime