很久後又一次接觸正則,那種似曾相似的感覺,你是不是也有這樣的感覺,這麼小CASE的東西,我一定要把他徹底掌握了,於是花時間看手冊,於是就明白了,於是下次又是似曾相似……
總寫下今天用到的地方:
//demo
$str = '
/**
* function: 獲取主題館數據
*
* @param string $topic 主題名
* @param string $pattern 正則模式
*
* @return array $data $data['href_content']:鏈接信息數組;$data['detail_content']:名稱信息數組
*/
private function get_topic_data($topic, $pattern1, $pattern2)
{
$data = array();
if( empty($topic) || empty($pattern1) || empty($pattern2))
{
return $data;
}
// 構建主題館數據
// 獲取整體數據
// 獲取頁面ID
$modpage_id = 0;
$modpages = $this->Modpage_Model->getAllPages();
foreach($modpages as $one_page) {
if ($one_page['department'] == $topic) {
$modpage_id = $one_page['id'];
}
}
// 取信息
$version_data = $this->Modpage_Model->getCurrentPageVersion($modpage_id);
$page_info_raw = $this->Modpage_Model->getVersionData($modpage_id, $version_data['version']);
// 生成數據
foreach ($page_info_raw as $k => $v)
{
//兒童單獨處理
if($topic == 'children')
{
if($v['module_id'] == 1 && $v['desc'] == '快速找寶貝')
{
$parse_str = $v['content'];
break;
}
}
else
{
// 去後台副導航數據
if($v['module_id'] == 4)
{
$parse_str = $v['content'];
break;
}
}
}
// 匹配主題館需要的數據
// 清洗數據
$parse_str = $this -> clearData($parse_str);
preg_match_all($pattern1, $parse_str, $matches);
if(!empty($matches))
{
$target_content = $matches[0][0];
}
// 替換主機名
$target_content = str_replace($this -> website, TOUCH_URL, $target_content);
// 清洗數據
$target_content = $this -> clearData($target_content);
preg_match_all($pattern2, $target_content, $matches_detail);
if(!empty($matches_detail))
{
$data['href_content'] = $matches_detail[1];
$data['detail_content'] = $matches_detail[2];
}
return $data;
}
/**
* function: 清洗數據(過濾字符串中的換行符、制表符)
*
* @param string $str 初始字符串
*
* @return string $str
*/
private function clearData( $str )
{
if( empty($str) )
{
return '';
}
// 清除換行符
$str = str_replace(
, '', $str);
// 清除換行符
$str = str_replace(
, '', $str);
// 清除制表符
$str = str_replace( , '', $str);
$str = trim( $str );
return $str;
}
/**
* 首頁入口
*
*/
public function index() {
$data = array();
$result = array();
// 獲取主題館信息
// 主題館原始數據 array('部門'=>array('類型','正則一','正則二'))
$topic_name_arr = array(
'sports' => array('sport','/
(.*?)
/i','/(.*?)/i'), 'womenshoes' => array('women','/
(.*?)
/i','/(.*?)/i'), 'menshoes' => array('man','/
(.*?)
/i','/(.*?)/i'), 'outdoor' => array('outdoor','/
(.*?)
/i','/(.*?)/i'), 'children' => array('children','/(.*?)/i','/(.*?)/i'), ); // 組織數據 foreach ($topic_name_arr as $type => $pattern) { $result = $this -> get_topic_data( $type, $pattern[1], $pattern[2] ); $data['data'][$pattern[0]] = $result; } $h_data['jspath'] = 'index'; $this->load->view(touch/common/header,$h_data); $this->load->view(touch/index/index,$data); $this->load->view(touch/common/footer); }
應用場景:
休閒鞋
正裝鞋
商務鞋
涼鞋
戶外鞋
帆布鞋
板鞋
男靴
棉鞋
1月新品
工裝鞋
牛津鞋
男靴
伐木鞋
帆船鞋
商務皮鞋
增高鞋
軍警靴