首页 > 网站 > WEB开发 > 正文

封装php类批量解析css成json格式

2024-04-27 14:26:40
字体:
来源:转载
供稿:网友
封装php类批量解析CSS成json格式

封装php类批量解析css成json格式

业务需求

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

实现方法

  • 话不多说,先上代码,咱们先睹为快。
     /**
  • Css解析成json类
  • Author:dreamzk
  • Data: 2015.05.21.0001
  • Release:b.15.05.21.01 */ class CsstoJson{

    /** * 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);

思路分析


  • 我这里是已经封装成一个类了,起哄三个函数分别处理了什么事情呢?
  • 第一个函数importCss我们把批量的css数据根据大括号的多少切割多少个数组
  • 然后把切割好的数据传值到第二个函数,然后遍历数组即可对每一组数据进行处理,再根据每一个css语句都是以分好结束作为数组分隔符切割成数组
  • 第三个函数既是对分割好的数组按照json键值对的方式组合好。

总结


  • 函数的复用性还是不是很高,希望各位看官如果有更好的方法,欢迎拍砖讨论。

如果您有任何意见或建议,请联系作者


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表