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
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 }
.))