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) . ')');
相關文章
相關標籤/搜索