我有以下css代码
h1, h2, h3, h4 {
color: #333;
font-size: 12px;
}
我想把它分成一个php数组,例如。
array(
h1 => array(
color => #333
font-size => 12px )
h2 => array(
color => #333
font-size => 12px )
h3 => array(
color => #333
font-size => 12px )
h4 => array(
color => #333
font-size => 12px )
)
有谁知道我会怎么做呢?
由于
答案 0 :(得分:0)
以下代码适用于大多数情况,但不是所有情况:
$clean_css_str = preg_replace('#/\*.*\*/#U', ' ', str_replace("\n", ' ', $css_str));
$r = preg_match_all('/([^{]+){([^}]*)}/', $clean_css_str, $match_arr);
$sel_arr = array_map('trim', $match_arr[1]);
$css_arr = array_map('trim', $match_arr[2]);
$css_map = array();
for ($i = 0; $i < $r; $i++) {
if (preg_match_all('/([-a-z_][-a-z0-9_]*)\s*:\s*([^;]+)(;|$)/i', $css_arr[$i], $match_arr)) {
$prop_arr = array_map('trim', $match_arr[1]);
$decl_arr = array_map('trim', $match_arr[2]);
$decl_map = array_combine($prop_arr, $decl_arr);
foreach (array_map('trim', explode(',', $sel_arr[$i])) as $sel) {
$css_map[$sel] = isset($css_map[$sel]) ? array_merge($css_map[$sel], $decl_map) : $decl_map;
}
}
}
var_export($css_map); echo "\n";
它不适用于@规则,在选择器中打开大括号,在声明中关闭大括号或分号,以及一些更奇特的情况。
(请注意:我在接受上述代码半年后修复了上述代码中的错误)
答案 1 :(得分:0)
只需使用CSS parser,github就有很多。