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