10分钟间隔的时间轴+换个思路的foreach循环

$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) . ')');

 

转载于:https://www.cnblogs.com/jiang-bo-chang/p/5328922.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值