$int_val = 1; //基础时间杠杆
$interval = 600 * $int_val; //时间间隔,600秒,10分钟
$etime = strtotime(date(‘Y-m-d H‘, time()) . ‘:00:00‘)+ 3600;
$stime = strtotime(date(‘Y-m-d H‘, time()) . ‘:00:00‘);
//$etime = strtotime(‘2016-01-28 00:00:00‘);
//$stime = strtotime(‘2016-01-27 18:00:00‘);
$stime = $_REQUEST[‘stime‘] != ‘0‘ ? strtotime($_REQUEST[‘stime‘]) : $stime;
$etime = $_REQUEST[‘etime‘] != ‘0‘ ? strtotime($_REQUEST[‘etime‘]) : $etime;
$xLength = intval(($etime - $stime) / $interval) + 1; //根据时间差算出X轴刻度数量
$baseData = array_pad(array(), $xLength, 0); //默认各刻度数据
$sql_channel = "SELECT cid, channelName FROM interval_data WHERE cTime>= $stime AND cTime<= $etime GROUP BY cid";
$channels = needInfo($sql_channel, ‘2‘);
$sql = "SELECT cid,channelName,gameName,SUM(shows) AS shows,SUM(clicks) AS clicks,SUM(regs) AS regs,cTime AS cTime FROM interval_data WHERE cTime>= $stime AND cTime<= $etime GROUP BY cTime,cid ORDER BY cTime,cid DESC";
$data = needInfo($sql, ‘2‘);
$subtitle = date(‘Y-m-d H:i:s‘, $stime) . ‘ 至 ‘ . date(‘Y-m-d H:i:s‘, $etime); //副标题
$xAxis = array(); //x轴
$series_shows = array(); //访问元数据
$series_clicks = array(); //点击元数据
$series_regs = array(); //注册元数据
for ($i = 0; $i < $xLength; $i++) {
$xAxis[$i] = $stime + ($interval * $i); //添加X轴日期数据
}
if (count($data) > 0) {
foreach ($channels as $value) {
//添加展示量渠道名称数据及默认刻度数据
$series_shows[$value[‘cid‘]][‘name‘] = $value[‘channelName‘] . ‘(‘ . $value[‘cid‘] . ‘)‘;
$series_shows[$value[‘cid‘]][‘data‘] = $baseData;
//添加点击量渠道名称数据及默认刻度数据
$series_clicks[$value[‘cid‘]][‘name‘] = $value[‘channelName‘] . ‘(‘ . $value[‘cid‘] . ‘)‘;
$series_clicks[$value[‘cid‘]][‘data‘] = $baseData;
//添加注册量渠道名称数据及默认刻度数据
$series_regs[$value[‘cid‘]][‘name‘] = $value[‘channelName‘] . ‘(‘ . $value[‘cid‘] . ‘)‘;
$series_regs[$value[‘cid‘]][‘data‘] = $baseData;
}
$tempdata = array(); //临时存储跨阶段数据
foreach ($data as $dk => $dv) {
$tempdata[$dv[‘cid‘]][‘show‘] = $tempdata[$dv[‘cid‘]][‘show‘] + intval($dv[‘shows‘]);
$tempdata[$dv[‘cid‘]][‘clicks‘] = $tempdata[$dv[‘cid‘]][‘clicks‘] + intval($dv[‘clicks‘]);
$tempdata[$dv[‘cid‘]][‘regs‘] = $tempdata[$dv[‘cid‘]][‘regs‘] + intval($dv[‘regs‘]);
if (in_array($dv[‘cTime‘], $xAxis)) {
$xk = array_search($dv[‘cTime‘], $xAxis);
$series_shows[$dv[‘cid‘]][‘data‘][$xk] = $tempdata[$dv[‘cid‘]][‘show‘];
$series_clicks[$dv[‘cid‘]][‘data‘][$xk] = $tempdata[$dv[‘cid‘]][‘clicks‘];
$series_regs[$dv[‘cid‘]][‘data‘][$xk] = $tempdata[$dv[‘cid‘]][‘regs‘];
unset($tempdata[$dv[‘cid‘]]);
}
/**
* ,该部分存在以条件性bug
* 条件:1,使用跨点合并数据是,及非基础阶段数据时,如:20分跨度,30分钟跨度
* 条件:2,快点存在数据,展示点不存在数据时,如:10分为跨点,存在渠道A的数据为11,20位展示点,没有渠道A的数据。
* 错误:会将跨点数据一致合并,直到展示点存在该渠道数据时合并展示
* 事例:如:10分钟跨点A渠道为11,20分展示点不存在A数据,30分存在A数据为10,40分展示点存在A数据为11,则40展示位11+10+11
* */
}
}
foreach ($xAxis as $xk => $xv) {
$xAxis[$xk] = date(‘H:i‘, $xv); //时间格式化
}
$datas = array();
$datas[‘subtitle‘] = $subtitle;
$datas[‘xAxis‘] = array_values($xAxis); //去重并删除索引
$datas[‘series‘][‘shows‘] = array_values($series_shows); //访问总数据
$datas[‘series‘][‘clicks‘] = array_values($series_clicks); //点击总数据
$datas[‘series‘][‘regs‘] = array_values($series_regs); //注册总数据
echo($_GET[‘callback‘] . ‘(‘ . json_encode($datas) . ‘)‘);
原文:http://www.cnblogs.com/jiang-bo-chang/p/5328922.html