/** * 取得数据集合 * * @param string $start 起始时间 * @param string $end 结束时间 * @param string $unit 时间单位 * @return array */ public function collect($start, $end, $unit) { if (!$this->_checkDatetimeUnit($unit)) { throw new ZtChart_Model_Assemble_Backend_Exception('The datetime unit is illegal: ' . $unit); } $this->_selectDatetimeTable($start, $end, $unit); $pos = ZtChart_Model_Assemble_Datetime::getDatetimePos($unit); $select = $this->select(ZtChart_Model_Assemble_Datetime::normalizeDatetime($start), ZtChart_Model_Assemble_Datetime::normalizeDatetime($end), $pos); $rowset = array(); foreach ($this->_selectGameTypes($select, $this->_group)->query()->fetchAll() as $row) { $label = substr($row[self::ROW_LABEL], 0, $pos); if (!array_key_exists($label, $rowset)) { $rowset[$label] = array(); } unset($row[self::ROW_LABEL]); $tmp =& $rowset[$label]; if (!empty($this->_merge)) { foreach ($this->_merge as $merge) { $v = $row[$merge]; if (!array_key_exists($v, $tmp)) { $tmp[$v] = array(); unset($row[$merge]); } $tmp =& $tmp[$v]; } } foreach ($row as $key => $value) { if (!array_key_exists($key, $tmp)) { $tmp[$key] = 0; } $tmp[$key] += $value; } } return $rowset; }