-1

私は次の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 )
)

どうすればこれを行うことができるか知っている人はいますか?

ありがとう

4

2 に答える 2

0

CSSパーサーを使用するだけで、githubにはたくさんあります。

于 2012-06-16T12:55:34.247 に答える
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";

@ 規則、セレクターの開始中括弧、宣言中の終了中括弧またはセミコロン、およびいくつかの特殊なケースでは機能しません。

(注:上記のコードは、承認されてから半年後にバグを修正しました)

于 2012-06-16T12:39:16.917 に答える