Ankündigung

Einklappen
Keine Ankündigung bisher.

Array-Sortierung [Stylesheets]

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Array-Sortierung [Stylesheets]

    Hallihallo,

    ich wollte mal meine CSS-Dateien sortieren...
    .. fragt nich warum

    Das hier ist lediglich ein Anfang, ein Versuch.
    u.A. werden nur CSS-Dateien in einem bestimmtem Format akzeptiert (siehe style.css) und Stylesheet-Eigenschaften, die nicht im Array $order sind, werden gar nicht erst mitsortiert.

    Nunja, darum gehts mir momentan noch nicht.
    Um was es mir geht ist die eigentliche Sortierung; und zwar, kann man die nicht ressourcensparender erledigen?

    Momentan wird insgesammt, für eine normal grose CSS-Datei, einige hundert Male ne Schleife durchlaufen...

    Darum bitte ich um etwaige Ideen, wie ich das ganze besser, ressourcensparender erledigen könnte.
    PHP-Code:
    <?php
    $line
    =array();
    $i2=$i=0;

    //Datei auslesen und zweidimensionales Array $line füllen
    $handle=fopen('style.css''r');
    while(!
    feof($handle)) 
    {
      
    $buffer=fgets($handle4096);
      if(
    eregi('{'$buffer)&&count($line)!=0)
      {
        
    $i2=0;
        
    $i++;
      }
      
    $line[$i][$i2]=$buffer;
      
    $i2++;
    }
    fclose($handle);

    //Neues, geordnetes, zweidimensionales Array $sorted aufbauen
    $order=array('float''height''width','margin''padding''border''background''color''font-size''font-style''line-height''text-decoration''list-style');
    $sorted=array();
    $i2=0;
    for(
    $i=0$i!=count($line); $i++)
    {
      
    $i4=0;
      
    $sorted[$i][0]=$line[$i][0];
      for(
    $i2=0$i2!=count($order); $i2++)
      {
        for(
    $i3=1$i3!=count($line[$i]); $i3++)
        {
          if(
    eregi($order[$i2], $line[$i][$i3]))
          {
            
    $i4++;
            
    $sorted[$i][$i4]=$line[$i][$i3];
          }
        }
      }
      
    $sorted[$i][count($line[$i])-1]=$line[$i][count($line[$i])-1];
    }

    //Ausgabe (Eher unrelevant, vllt. wenn mans testen möchte)
    for($i=0$i!=count($sorted); $i++)
    {
      for(
    $i2=0$i2!=count($sorted[$i]); $i2++)
      {
        echo 
    $sorted[$i][$i2].'<br />';
      }
    }
    ?>
    Die CSS-Datei vor der Sortierung:
    http://85.114.140.132/ex/style.css

    Und danach:
    http://85.114.140.132/ex/sortiert.style.css

    Wie gesagt, bitte nicht den Sinn des ganzen hinterfragen, sondern bitte über die ressourcensparende Bewerkstelligung sich Gedanken machen .

    Danke.


  • #2
    Hallo,

    ich denke, ein Grund wäre der: CSS: Einfache Regeln zur Organisation und Effizienzsteigerung – Artikel von Jens Meiert

    Vielleicht kannst du die Funktion preg_replace_callback() benutzen.
    Z.B.
    PHP-Code:
    $css file_get_contents('style.css');
    $css preg_replace_callback('#\s*(.+)\s*\{\s*(.*)\s*\}#Us''sortCss'$css);

    function 
    sortCss($args) {
        
    $return_css trim($args[1]) . " {\n";
        
        
    $properties explode(';'trim($args[2]));
        
    sort($properties);
        
        foreach (
    $properties as $value) {
            if (empty(
    $value)) {
                continue;
            }
            
    $return_css .= "    " trim($value) . ";\n";
        }
        
        
    $return_css .= "}\n";
        return 
    $return_css;

    Ich habe bewusst kein implode(), sondern eine Schleife benutzt, um leere Einträge zu entfernen etc. Wer eine bessere Lösung weiß, darf sie gerne posten.
    Wenn du das Sortieren noch mehr anpassen willst (z.B. mit deiner White-List), dann kannst du die Funktion weiter anpassen. Willst du einfach nur Eigenschaften entfernen, so kannst du das in der Schleife machen.

    Ich würde das ganze jetzt CSS-Beautifier nennen...
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Hallo papl,

      darf ich fragen wozu man soetwas brauchen sollte?
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design before you start to write code!
      2. Discuss and review it together with experts!
      3. Choose good tools (-> Adventure PHP Framework (APF))!
      4. Write clean and reusable software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #4
        Mit Verlaub. -> Einsteigerfrage
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Also ich benutze den Eclipse->Formatter fuer CSS-Dateien. Was du da oben machst versteh ich nicht. Du musst die Datei lediglich mit file() einlesen und dir einen Zustandsflag zulegen, wo du dich befindest, innerhalb oder ausserhalb einer Anweisung. Wenn du innerhalb bist machst du explode(":", $strLine, 2) und formatierst ihn eingerueckt. Aber dafuer gibts bestimmt auch schoene CssBeautifier.
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar

          Lädt...
          X