最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

封装php类批量解析css成json格式_html/css_WEB-ITnose

来源:动视网 责编:小采 时间:2020-11-27 16:05:48
文档

封装php类批量解析css成json格式_html/css_WEB-ITnose

封装php类批量解析css成json格式_html/css_WEB-ITnose:封装php类批量解析css成json格式 业务需求 我相信很多同学有过做一个自定义建站系统的想法,好比某空间的自定义拖拽组件,如果想要实现一个可视化建站系统,那CSS作为前端样式而言,是必须要存入到数据库中作为配置项的,所以,这里不可避免的需要对css做
推荐度:
导读封装php类批量解析css成json格式_html/css_WEB-ITnose:封装php类批量解析css成json格式 业务需求 我相信很多同学有过做一个自定义建站系统的想法,好比某空间的自定义拖拽组件,如果想要实现一个可视化建站系统,那CSS作为前端样式而言,是必须要存入到数据库中作为配置项的,所以,这里不可避免的需要对css做


封装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键值对的方式组合好。
  • 总结

  • 函数的复用性还是不是很高,希望各位看官如果有更好的方法,欢迎拍砖讨论。
  • 如果您有任何意见或建议,请联系作者

    文档

    封装php类批量解析css成json格式_html/css_WEB-ITnose

    封装php类批量解析css成json格式_html/css_WEB-ITnose:封装php类批量解析css成json格式 业务需求 我相信很多同学有过做一个自定义建站系统的想法,好比某空间的自定义拖拽组件,如果想要实现一个可视化建站系统,那CSS作为前端样式而言,是必须要存入到数据库中作为配置项的,所以,这里不可避免的需要对css做
    推荐度:
    标签: 格式 文件 php
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top