首页 > 其他 > 详细

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

时间:2016-03-28 15:11:46      阅读:234      评论:0      收藏:0      [点我收藏+]

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

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

原文:http://www.cnblogs.com/jiang-bo-chang/p/5328922.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!