我相信不少同窗有過作一個自定義建站系統的想法,比如某空間的自定義拖拽組件,若是想要實現一個可視化建站系統,那CSS做爲前端樣式而言,是必需要存入到數據庫中做爲配置項的,因此,這裏不可避免的須要對css作解析,我這裏給出個人解析方法,固然還有很大的優化空間,這只是一個第一版,實現了最原始的解析過程,但願你們拍磚。
/**
Release:b.15.05.21.01
*/
class CsstoJson{php
/**
* CSS批量導入功能
* @function ImportCss
* @param $data{xxx:XXX; yyy:YYY;}
* @Description 按照必定規則導入CSS樣式結構入庫
* @return boolean
*/
public function ImportCss($post){
$data = str_replace("}","}&",$post); # 將}替換成}&
$data =explode('&',$data); # &用於切割每一個css樣式表到數組
array_pop($data); # 去掉最後一個數組元素
$JsonData =self:: arrayToCss($data);
$length =1-count($JsonData);
$JsonData = substr($JsonData,$length,-1); # 截取字符串最後
$JsonData = "{".$JsonData."}";
$JsonData = json_decode($JsonData,true); # 轉換成json數組
return $JsonData;
}css
/**
* CSS數據樣式化函數
* @function array_to_css
* @param $ArrayData 爲格式話的css樣式數據
*/
public function arrayToCss($ArrayData){
$GetData=null;
//遍歷傳送過來的數組
foreach($ArrayData as $key => $arraydatas ){
$arraydatas = str_replace("{","&{",$arraydatas); # 替換傳送過來數據中的 { ,便於以後作字符串轉換
$arraydatas = explode('&',$arraydatas);
$jsondata = self::strToJson($arraydatas);
$GetData =$GetData.$jsondata.",";
}
return $GetData;
}前端
/**
* 解析數組裏面的字符串操做
* @function strToJson
* $Strdata 二維數組,裏面含有
*/
public function strToJson($Strdata){
//替換CSS數據名稱
$Strdata['0'] = str_replace(".","",$Strdata['0']);
$Strdata['1'] = str_replace("{","",$Strdata['1']);
$Strdata['1'] = str_replace("}","",$Strdata['1']);
$temp = null;
$StrdataChild = explode(';',$Strdata['1']);
array_pop($StrdataChild);
foreach($StrdataChild as $key => $StrdataChilds){
$StrdataChilds = explode(':',$StrdataChilds); # 分解每一個類名下面的屬性與具體數值的鍵值對
$ProName = trim($StrdataChilds['0']); # 去掉表單字段的空格,否則入庫沒法識別
$jsondata = """.$ProName.""".':'.""".$StrdataChilds['1']."","; # 把相似height:10px這樣的鍵值對分開成想要的數據結構
$temp = $temp.$jsondata; # 操做css的height等具體字段配置關係
}
$ClassName = trim($Strdata['0']); # 去掉表單字段的空格,否則入庫沒法識別數據庫
#獲取當前字符串的長度 $length =1-count($temp); #截取字符串最後 $temp = substr($temp,$length,-1); #把當前所屬分類名稱加入到子集中 $temp = "\""."classname"."\"".":"."\"".$ClassName."\"".",".$temp; return "\"".$Strdata['0']."\"".":"."{".$temp."}"; }
}json
$cssdata = ".wrapper .box{border:1px #e1e1e1 solid;}.wrapper .box .title{height:31px;border-bottom:1px #e1e1e1 solid;line-height:30px;}";
$toJson = new CsstoJson();
$reData = $toJson->ImportCss($cssdata);
var_dump($reData);數組
若是您有任何意見或建議,請聯繫做者數據結構