mCids = []; self::load_xml(); } public function name($hot_id) { foreach ($this->mCategories as $item) { if($item['hot_id'] == $hot_id) { return $item['name']; } foreach ($item['subitem'] as $subitem) { if($subitem['hot_id'] == $hot_id) { return $subitem['name']; } } } return ''; } private function load_xml() { libxml_use_internal_errors(true); $xml = simplexml_load_string($this->content()); if($xml === false) { $err_msg = json_encode(libxml_get_errors(),JSON_UNESCAPED_UNICODE); Log::record("{$err_msg}", Log::ERR); libxml_clear_errors(); throw new Exception("无法解析XML."); } $url = RESOURCE_SITE_URL . self::img_path; $this->mCategories = array(); foreach($xml->children() as $xitem) { $item = array(); $attrs = $xitem->attributes(); $title = $attrs['title']->__toString(); $pid = $attrs['id']->__toString(); $cids = $attrs['cids']->__toString(); $img = $attrs['img']->__toString(); $item['name'] = $title; $item['hot_id'] = $pid; $item['img'] = $url . '/' . $img; $item['subitem'] = array(); $this->add_cids($pid,$cids); foreach($xitem->children() as $xsubitem) { $subitem = array(); $sattrs = $xsubitem->attributes(); $title = $sattrs['title']->__toString(); $sid = $sattrs['id']->__toString(); $cids = $sattrs['cids']->__toString(); $img = $sattrs['img']->__toString(); $subitem['name'] = $title; $subitem['hot_id'] = $sid; $subitem['img'] = $url . '/' . $img; array_push($item['subitem'],$subitem); $this->add_cids($sid,$cids); $this->add_cids($pid,$cids); } array_push($this->mCategories,$item); } } private function add_cids($id,$cids) { if(!isset($this->mCids[$id])) { $this->mCids[$id] = []; } $cids = explode(',',$cids); foreach($cids as $val) { $cur_cids = &$this->mCids[$id]; if(!empty($val) && !in_array($val,$cur_cids)) { array_push($cur_cids,$val); } } } public function categories() { try { return $this->mCategories; } catch (Exception $ex) { return array(); } } public function cids($id) { try { if(!isset($this->mCids[$id])) { return array(); } else { return $this->mCids[$id]; } } catch (Exception $ex) { return array(); } } private function content() { $content = << EOD; return $content; } }