ホームページ  >  記事  >  ウェブフロントエンド  >  PHP クラスをカプセル化して CSS を JSON にバッチ解析する format_html/css_WEB-ITnose

PHP クラスをカプセル化して CSS を JSON にバッチ解析する format_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:44:041129ブラウズ

CSS を json 形式にバッチ解析するための php クラスをカプセル化する

ビジネス要件

我相信很多同学有过做一个自定义建站系统的想法,好比某空间的自定义拖拽组件,如果想要实现一个可视化建站系统,那CSS作为前端样式而言,是必须要存入到数据库中作为配置项的,所以,这里不可避免的需要对css做解析,我这里给出我的解析方法,当然还有很大的优化空间,这只是一个初版,实现了最原始的解析过程,希望大家拍砖。

実装方法

  • これ以上面倒なことはせずに、コードを覗いてみましょう。
     /**
  • Css を json クラスに解析しました
  • 作成者: dreamzk
  • データ: 2015.05.21.0001
  • リリース: b.15.05.21.01
    */
    Cs stoJson{

    /**
    * 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 データ スタイリング関数
    * @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."}";	} 

    }

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

    アイデア分析

  • ここではそれをクラスにカプセル化しました。3 つの関数は何を処理しますか?
  • 最初の関数 importCss では、CSS データのバッチを中括弧の数に応じた数の配列に切り取ります
  • 次に、切り取ったデータを 2 番目の関数に渡し、配列を走査して各セットを処理しますデータを処理し、各 css ステートメントが配列区切り文字として split で終わるという事実に従って、配列に分割します
  • 3 番目の関数は、分割された配列を json キーと値のペアの形式で結合します。
  • まとめ

  • 関数の再利用性はまだそれほど高くありません。より良い方法があれば、議論していただければ幸いです。
  • ご意見やご提案がございましたら、作者までご連絡ください

    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。