Bonsoir à tous,
je suis en train de faire un script qui permet de convertir un fichier css en tableau multi-dimentionnelle.

Le script fonctionne pas mal, mais effectue un opération en double

voici un extrait du fichier css qu'il doit convertir

html, body {
    color: #053754;
    background: url("./images/background.jpg") no-repeat center fixed; 
    -webkit-background-size: cover; /* pour anciens Chrome et Safari */
    background-size: cover; /* version standardis�e */;
    padding: 0;
}
a, table.table1 td, h3, dl.details dd, dl.details dd a, dl.faq a, .postprofile, ul.topiclist li, ul.topiclist li:hover, .content dl.faq, .content h2, .panel h2, dt label, dt span, .copyright {
    color: #053754;
}
h3, .content h2, .panel h2 {
    border-bottom-color: #053754;
}

et voilà ce qu'il retranscrit

[0]=>
  array(2) {
    ["element"]=>
    string(11) "html, body "
    ["rules"]=>
    array(4) {
      ["color"]=>
      string(8) " #053754"
      ["background"]=>
      string(54) " url("./images/background.jpg") no-repeat center fixed"
      ["-webkit-background-size"]=>
      string(6) " cover"
      ["padding"]=>
      string(2) " 0"
    }
  }
  [1]=>
  array(2) {
    ["element"]=>
    string(11) "html, body "
    ["rules"]=>
    array(4) {
      ["color"]=>
      string(8) " #053754"
      ["background"]=>
      string(54) " url("./images/background.jpg") no-repeat center fixed"
      ["-webkit-background-size"]=>
      string(6) " cover"
      ["padding"]=>
      string(2) " 0"
    }
  }
  [2]=>
  array(2) {
    ["element"]=>
    string(192) "
a, table.table1 td, h3, dl.details dd, dl.details dd a, dl.faq a, .postprofile, ul.topiclist li, ul.topiclist li:hover, .content dl.faq, .content h2, .panel h2, dt label, dt span, .copyright "
    ["rules"]=>
    array(4) {
      ["color"]=>
      string(8) " #053754"
      ["background"]=>
      string(54) " url("./images/background.jpg") no-repeat center fixed"
      ["-webkit-background-size"]=>
      string(6) " cover"
      ["padding"]=>
      string(2) " 0"
    }
  }
  [3]=>
  array(2) {
    ["element"]=>
    string(192) "
a, table.table1 td, h3, dl.details dd, dl.details dd a, dl.faq a, .postprofile, ul.topiclist li, ul.topiclist li:hover, .content dl.faq, .content h2, .panel h2, dt label, dt span, .copyright "
    ["rules"]=>
    array(4) {
      ["color"]=>
      string(8) " #053754"
      ["background"]=>
      string(54) " url("./images/background.jpg") no-repeat center fixed"
      ["-webkit-background-size"]=>
      string(6) " cover"
      ["padding"]=>
      string(2) " 0"
    }
  }
  [4]=>
  array(2) {
    ["element"]=>
    string(28) "
h3, .content h2, .panel h2 "
    ["rules"]=>
    array(5) {
      ["color"]=>
      string(8) " #053754"
      ["background"]=>
      string(54) " url("./images/background.jpg") no-repeat center fixed"
      ["-webkit-background-size"]=>
      string(6) " cover"
      ["padding"]=>
      string(2) " 0"
      ["border-bottom-color"]=>
      string(8) " #053754"
    }
  }

pour une raison qui m'est obscure il double les elements

auriez vous une idées de l'erreur que j'ai pu commaitre

//fonction qui parcoure la variable css et la convertit en tableaux multidimentionnel
function Css_Decode($css)
{
    $result = explode('}', $css);

    foreach ($result as $key => $info) {
        //echo $i++;

        $info = explode('{', $info);
        //$rules = array();

        foreach ($info as $value) {

            $rule = explode(';', $info[1]);
            foreach ($rule as $item) {
                $element = explode(':', $item);
                if ($element[1] != null) {
                    $rules[trim($element[0])] = $element[1];
                }
                unset($value);
            }
            $to_css[] = array(
                'element' => $info[0],
                'rules' => $rules
            );

            unset($item);
        }

    }
    return $to_css;
}

function Clean_CSS($css)
{
    $css = preg_replace("/(\/\*)(.*?)(\*\/\;)(.)/sm", "$4", $css);
    return preg_replace("/(\/\*)(.*?)(\*\/)(.)/sm", "$4", $css);
}

$file_name = "./forum/styles/".$user->style['style_path']."/theme/stylesheet.css";
$fp = file($file_name);
//var_dump($fp);
foreach ($fp as $key => $line)
    {
        $css_origine=$css_origine."".$line;
    }

$clean_css=Clean_CSS($css_origine);
$data=Css_Decode($clean_css)

merci d'avance flo

3 réponses


Si tu fais un endforeach; ça ne change rien? ._.

Hello. Ré-écrit ton code (la fonction Css_Decode plutôt) en séparant tes foreach's en plusieurs autres fonctions; t'y comprendras l'importance de séparer les bouts de codes, t'y verras plus clair. Tu comprendras mieux ton code et tes erreurs! Mais si tu ne comprends toujours pas l'erreur, en gros c'est parce que... (à voir dans les prochains posts si tu me réponds lol ;-) mais j't'assure qu'il est simple en vérité)

(2 foreach max. pour réaliser cela. (Commence par l'open bracket { et n'utilise pas de foreach sur le résultat d'un explode sur }.))

flo3376
Auteur

idée abandonné, mais merci de votre aide